我正在开发基于Spring MVC的webapp.
下面是我的环境信息: - ,
Java 1.8.0_162 (64 bit),,Spring 4.3.1 为SSO,和.Apache Tomcat 8.0.49Waffle-1.8.3jquery-1.11.3Google Charts API
将以下JavaScript代码放在一个常见的JS文件中: -
$.ajaxSetup({ cache: false });
POST对服务器的jQuery AJAX 请求在Mozilla和Chrome浏览器中完美运行.但是当谈到IE 11浏览器时,jQuery AJAX POST请求只有在第一次加载窗口时才能正常工作.然后随机失败并且一旦失败,后续请求也会失败.
以下是IE 11浏览器的" 网络"选项卡的快照: -
这两个请求在其各自的请求主体中都有JSON对象.但是,成功请求的Content-Length属性值为416(字符串化JSON对象的总字符数),失败的属性值为0.对于随机失败的POST请求和后续请求,Content-Length始终为0,但计算的JSON对象始终存在于请求正文中.在每个请求中,JSON对象都是动态构建的.
UPDATE-1(26March2018)以下是文件中Waffle定义的AD身份验证配置web.xml: -
<filter>
<filter-name>SecurityFilter</filter-name> …Run Code Online (Sandbox Code Playgroud) 我们的Web应用程序遇到了一些奇怪的行为.有些POST请求没有任何http正文.content-length为0.根本没有post参数.我们在我们的负载均衡器上跟踪网络流量,我们发现我们没有得到任何请求正文和我们的一些POST请求.
所有损坏的POST请求都有共同点,它们通过代理服务器到达.
我们已经在SO上找到了这个问题: 为什么POST请求中的"Content-Length:0"?
我们现在使用帧转义javascript例程,它有点帮助.似乎错误率下降.但是我们仍然有POST请求没有数据,这些数据在我们的webapp中永远不会发生.这些请求不是来自黑客或类似的.
我们经常看到webwasher作为代理.但大多数时候我们都没有看到使用了哪个代理.
在这篇PDF中,我们看到了关于使用webwasher缺少POST参数的评论
关于一些陷阱的说明
请注意,在设置透明身份验证时必须考虑一些缺陷:
如果ICAP服务器将重定向发送到身份验证服务器,则POST请求将失败.但是,这仅影响映射的更新,因为对于浏览器,请求成功,并且在最终重定向之后将不再发送POST正文.
我们想知道是否除了仅使用GET而不是POST之外还有一些解决方法.如果其他网站在POST数据丢失方面存在问题以及他们做出了哪些结论,我们也会在这里.
是否还有其他原因导致POST数据未发送?
我们看到IE 11中缺少POST的看似随机调用的问题.进一步检查后,来自浏览器的请求包括NTLM协商令牌.我们也经常在GET上看到这个标记,但它们不受身体问题的影响,因为它们没有.Chrome和FF没有此问题.
进一步的调查显示,如果我们的会话超时并且浏览器被重新刷新,那么我们将在此之后以大约1-2分钟的间隔始终看到此问题.我的理解是,如果IE"期望"401,那么它将不包括POST主体,因为期望再次发生NTLM握手.
我们有一个角度app(目前混合Angular 1和2,但在此之前发生在1).角度应用程序使用对我们的Spring启动应用程序进行restful webservice调用.我们使用华夫饼为NTLM auth
// Shiro-Waffle / Security
'com.github.dblock.waffle:waffle-parent:1.7.3',
'com.github.dblock.waffle:waffle-shiro:1.7.3',
'org.apache.shiro:shiro-core:1.2.3',
'org.apache.shiro:shiro-web:1.2.3',
Run Code Online (Sandbox Code Playgroud)
我有一个糟糕的解决方法,我将在下面作为答案发布,但我根本不喜欢它.
我知道这是可能的,但我似乎无法弄明白.
我有一个mySQL查询,有几十万个结果.我希望能够发送结果,但似乎响应需要内容长度标头才能开始下载.
在phpMyAdmin中,如果你去导出一个数据库,它立即开始下载,FF只是说未知的文件大小,但它的工作原理.我查看了那段代码,但无法理解.
救命?
谢谢.
此处描述了类似的问题:GWT IllegalArgumentException:encodedRequest不能为空
我的GWT应用程序部署在Tomcat6中,它通过使用Coyote/JK2连接器与Apache链接.对于SSO,我使用mod_auth_sspi/1.0.4.
当我使用IE8时,页面不显示,但对于Firefox一切正常.在Tomcat日志中,我看到以下内容:
SEVERE: Exception while dispatching incoming RPC call
java.lang.IllegalArgumentException: encodedRequest cannot be empty
at com.google.gwt.user.server.rpc.RPC.decodeRequest(RPC.java:232)
at org.spring4gwt.server.SpringGwtRemoteServiceServlet.processCall(SpringGwtRemoteServiceServlet.java:32)
at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:643)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:723)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at gov.department.it.server.RequestInterceptorFilter.doFilter(RequestInterceptorFilter.java:90)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:311)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:776)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:705)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:898)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Thread.java:619)
Run Code Online (Sandbox Code Playgroud)
到目前为止我尝试了什么:
1)找不到注册表项DisableNTLMPreAuth(恕我直言,这不是解决方案,因为在我的情况下IE 8是主动使用的).
2)我已经安装并配置了本机Windows身份验证框架WAFFLE
web.xml中:
...
<filter>
<filter-name>NegotiateSecurityFilter</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> …Run Code Online (Sandbox Code Playgroud)