相关疑难解决方法(0)

为什么IE 11浏览器随机地为jQuery AJAX POST请求提供Content-Length = 0?

我正在开发基于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 请求在MozillaChrome浏览器中完美运行.但是当谈到IE 11浏览器时,jQuery AJAX POST请求只有在第一次加载窗口时才能正常工作.然后随机失败并且一旦失败,后续请求也会失败.

以下是IE 11浏览器的" 网络"选项卡的快照: -

  1. 成功的 ajax POST请求: 在此输入图像描述

  2. 失败的 ajax POST请求: 在此输入图像描述

这两个请求在其各自的请求主体中都有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)

java ajax jquery waffle internet-explorer-11

21
推荐指数
1
解决办法
1088
查看次数

缺少代理服务器的POST参数

我们的Web应用程序遇到了一些奇怪的行为.有些POST请求没有任何http正文.content-length为0.根本没有post参数.我们在我们的负载均衡器上跟踪网络流量,我们发现我们没有得到任何请求正文和我们的一些POST请求.

所有损坏的POST请求都有共同点,它们通过代理服务器到达.

我们已经在SO上找到了这个问题: 为什么POST请求中的"Content-Length:0"?

我们现在使用帧转义javascript例程,它有点帮助.似乎错误率下降.但是我们仍然有POST请求没有数据,这些数据在我们的webapp中永远不会发生.这些请求不是来自黑客或类似的.

我们经常看到webwasher作为代理.但大多数时候我们都没有看到使用了哪个代理.

在这篇PDF中,我们看到了关于使用webwasher缺少POST参数的评论

WebWasher - 透明认证指南

关于一些陷阱的说明

请注意,在设置透明身份验证时必须考虑一些缺陷:

如果ICAP服务器将重定向发送到身份验证服务器,则POST请求将失败.但是,这仅影响映射的更新,因为对于浏览器,请求成功,并且在最终重定向之后将不再发送POST正文.

我们想知道是否除了仅使用GET而不是POST之外还有一些解决方法.如果其他网站在POST数据丢失方面存在问题以及他们做出了哪些结论,我们也会在这里.

是否还有其他原因导致POST数据未发送?

proxy http-post

7
推荐指数
1
解决办法
3244
查看次数

IE使用NTLM身份验证时随机发送空POST主体(使用angular to Spring)

我们看到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)

https://blogs.msdn.microsoft.com/ieinternals/2010/11/21/challenge-response-authentication-and-zero-length-posts/

我有一个糟糕的解决方法,我将在下面作为答案发布,但我根本不喜欢它.

authentication internet-explorer spring ntlm angularjs

5
推荐指数
1
解决办法
2618
查看次数

如何在没有内容长度的PHP中发送数据?

我知道这是可能的,但我似乎无法弄明白.

我有一个mySQL查询,有几十万个结果.我希望能够发送结果,但似乎响应需要内容长度标头才能开始下载.

在phpMyAdmin中,如果你去导出一个数据库,它立即开始下载,FF只是说未知的文件大小,但它的工作原理.我查看了那段代码,但无法理解.

救命?

谢谢.

php mysql header

4
推荐指数
1
解决办法
2586
查看次数

调度传入的RPC调用时发生异常:encodedRequest不能为空

此处描述了类似的问题: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)

apache internet-explorer tomcat ntlm single-sign-on

1
推荐指数
1
解决办法
7548
查看次数