GWT IllegalArgumentException:encodedRequest不能为空

GWT IllegalArgumentException:encodedRequest不能为空,gwt,encoding,Gwt,Encoding,我正在使用gwt1.5、struts2、spring和hibernate。我遇到以下错误: ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/project name] - Exception while dispatching incoming RPC call java.lang.IllegalArgumentException: encodedRequest cannot be empty 此错误仅

我正在使用gwt1.5、struts2、spring和hibernate。我遇到以下错误:

ERROR org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/project name] - Exception while dispatching incoming RPC call java.lang.IllegalArgumentException: encodedRequest cannot be empty

此错误仅在IE中出现,但在FireFox中工作正常。

这似乎是代理问题,代理服务器正在剥离请求主体,请参阅


此外,根据我的经验,这个问题似乎只发生在使用IE7.0而不是IE6.0时,我也有同样的错误。这是由于使用NTLM身份验证时,没有来自Internet Explorer的数据的POST请求造成的

解释如下:

解决办法是:

  • 在MS Windows上的Tomcat上使用SecurityFilter

    <filter>
      <filter-name>MySecurityFilter</filter-name>
      <filter-class>waffle.servlet.NegotiateSecurityFilter</filter-class>
      <init-param>
        <param-name>waffle.servlet.spi.NegotiateSecurityFilterProvider/protocols</param-name>
        <param-value>
        NTLM
        </param-value>
      </init-param>
    </filter>
    <filter-mapping>
      <filter-name>MySecurityFilter</filter-name>
      <url-pattern>/appA/*</url-pattern>
      <url-pattern>/appB/*</url-pattern>
    </filter-mapping>`
    

在过去的几个月里,我对此做了大量的研究——在详细介绍之前,我的web应用程序使用的是运行在Tomcat 7上的GWT 2.x,前面是Apache httpd 2.2.x和mod_jk 1.2.x设置

对于mod_jk版本1.2.26,我偶尔会在日志中看到“encodedRequest不能为空”错误。正如问题所说,这只会发生在IE中,对我来说只有IE8/9。问题是我的服务器操作系统是Linux,所以NTLM身份验证不可能成为问题。在更新版本的mod_jk(本文为1.2.37)中,我会在Tomcat日志中得到一个套接字超时和读取错误

在每隔几秒钟向服务器轮询web应用程序的过程中,会记录此错误,以获取在单独线程中启动的长时间运行操作的状态。轮询将每五秒钟进行一次,但在执行此状态请求时偶尔会挂起

在执行了大量tcpdump命令之后,我发现挂起的请求将出现在由Apache重置的TCP连接上;正在向浏览器发送FIN/ACK,服务器将接收POST请求标头和正文,服务器将继续重置连接。然后,奇怪的是,只有标题会从浏览器返回到服务器。经过研究,我发现:


显然,IE只会在重新发送POST请求时发送标题。以真正的Microsoft方式,这个问题实际上已经知道一段时间了,已经发布并安装了修补程序,但没有在客户端计算机上启用。如果不想强制所有用户编辑其注册表,则需要在服务器上禁用HTTP保持活动,或将保持活动超时增加到>60秒。对于我的apache httpd服务器,我将KeepAliveTimeout设置为65,将MaxKeepAliveRequests设置为0,这样服务器就不会启动到浏览器的连接重置。

有关此问题的任何更新,请注意,我在IE6本身上收到此错误
registry key:
HKEY_CURRENT_USER/Software/Microsoft/Windows/CurrentVersion/Internet
Settings/ Value Name: DisableNTLMPreAuth 
Data Type: REG_DWORD 
Value: 1