gpt4 book ai didi

java - 为什么 IE 11 浏览器对于 jQuery AJAX POST 请求随机有 Content-Length=0?

转载 作者:IT老高 更新时间:2023-10-28 20:54:52 29 4
gpt4 key购买 nike

我正在开发基于 Spring MVC 的 webapp。

以下是我的环境详细信息:-Java 1.8.0_162(64 位)Spring 4.3.1Apache Tomcat 8.0.49Waffle-1.8.3 用于 SSO、jquery-1.11.3Google Charts API

已将以下 JavaScript 代码放入其中一个常见的 JS 文件中:-$.ajaxSetup({ cache: false });

向服务器发出的 jQuery AJAX POST 请求在 MozillaChrome 浏览器中完美运行。但是对于 IE 11 浏览器,jQuery AJAX POST 请求只有在第一次加载窗口时才能正常工作。然后随机失败,一旦失败,后续请求也会失败。

以下是IE 11浏览器的网络标签截图:-

  1. 成功 ajax POST 请求: enter image description here

  2. FAILED ajax POST 请求: enter image description here

两个请求在各自的 request 正文中都有 JSON 对象。但是,Content-Length 属性值为 416(字符串化 JSON 对象的总字符数)表示成功请求,0 表示失败一。对于随机失败的 POST 请求和后续请求,Content-Length 始终为 0,但计算出的 JSON 对象始终存在于请求正文。在每个请求中,JSON 对象都是动态构建的。

UPDATE-1 (26March2018) 以下是 web.xml 文件中定义的 Waffle AD 身份验证配置:-

<filter>
<filter-name>SecurityFilter</filter-name>
<filter-class>waffle.servlet.NegotiateSecurityFilter</filter-class>
<init-param>
<param-name>principalFormat</param-name>
<param-value>fqn</param-value>
</init-param>
<init-param>
<param-name>roleFormat</param-name>
<param-value>both</param-value>
</init-param>
<init-param>
<param-name>allowGuestLogin</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>securityFilterProviders</param-name>
<param-value>
waffle.servlet.spi.NegotiateSecurityFilterProvider
</param-value>
</init-param>
<init-param>
<param-name>waffle.servlet.spi.NegotiateSecurityFilterProvider/protocols</param-name>
<param-value>
Negotiate
NTLM
</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SecurityFilter</filter-name>
<url-pattern>/welcome.do</url-pattern>
</filter-mapping>

只有 1 URL 即 /welcome.do(加载 webapp 的初始 URL)被配置为调用 SSO 身份验证。

以下是触发 AJAX 请求的 JavaScript 代码:-

function getData() {
let dashboardFilterParams=new DashboardFilterParams(<passing the arguments to this constructor>);
//alert(JSON.stringify(dashboardFilterParams));
//console.dir(dashboardFilterParams);
$.ajax({
url: str_THIS_WA_URL+"/xyz/abcdXYZ.do?httpReqType=ajaxReq",
data: JSON.stringify(dashboardFilterParams),
dataType: "json",
contentType: "application/json",
mimeType: "application/json",
type: "POST",
success:function(responseData){
if(responseData && "success"===responseData.reqResult) {
//populating tables & drawing charts using Google Charts JS API if successfully fetched the data
} else {
//showing error message
}
},
error:function(data,status,er) {
showTheMessage("danger","Error getting data");
console.log("error: "+JSON.stringify(data)+"\n status: "+status+"\n er:"+er);
}
});
}

IE 11 版本详情:

IE 11 version details

另外,我正在使用 Google Charts API 在页面上呈现图表。请求被触发到 Google Charts API 服务器。这对IE浏览器有影响吗?

有什么办法让它在IE 11浏览器中运行?

在评论部分回答 Federico klez Culloca 的问题:

  1. 请求(客户端)端没有错误。但是来自服务器的响应显示客户端发送的请求在语法上不正确。以及响应头 Response HTTP/1.1 400 Bad Request.

  2. 请求正文内容完全没有区别。

  3. str_THIS_WA_URL 变量指向与 webapp 相同的域,即 AJAX 请求在当前域内。

在 URL 中添加时间戳(根据 shawn 在下面评论部分的建议)未能解决问题。

最佳答案

IE 这样做是为了优化,因为它希望服务器回复 HTTP/401 凭据质询,而将正文传输两次将是一种浪费。

在您的情况下,由于 /welcome.do 使用 NTLM 进行保护,IE 现在假定 / 和下面的所有内容 都是 protected 一部分保护空间,因此将无主体 POST 优化应用于所有内容。

解决方法是将 /welcome.do 移动到 /secured/welcome.do 并确保 /secured 下没有不安全的资源>.

更多详情:Challenge-Response Authentication and Zero-Length Posts .

关于java - 为什么 IE 11 浏览器对于 jQuery AJAX POST 请求随机有 Content-Length=0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49403936/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com