首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么IE 11浏览器对jQuery AJAX请求随机有内容长度=0?

为什么IE 11浏览器对jQuery AJAX请求随机有内容长度=0?
EN

Stack Overflow用户
提问于 2018-03-21 10:32:09
回答 1查看 1.8K关注 0票数 20

我正在开发基于Spring的webapp。

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

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

向服务器发出的jQuery AJAX POST请求在Mozilla & Chrome浏览器中运行得非常完美。但是,当涉及到IE 11浏览器时,jQuery AJAX POST请求只在首次加载窗口时才能正常工作。然后随机失败&一旦失败,随后的请求也会失败。

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

  1. 成功的 ajax POST请求:

  1. 失败了 ajax POST请求:

这两个请求在各自的请求主体中都有JSON对象。但是,对于成功的请求,Content-Length属性值是416 (字符串化JSON对象的总字符)&失败请求的。对于随机失败的POST请求&后续请求,Content-Length始终是,但是计算出来的JSON对象总是存在于请求体中。在每个请求中,都动态地构建JSON对象。

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

代码语言:javascript
复制
<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 (加载应用程序的初始URL )被配置为调用SSO身份验证。

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

代码语言: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版本详细信息:

另外,我使用Google 在页面上呈现图表。为此,请求被激发到服务器。这在IE浏览器中有效果吗?

IE 11浏览器中有什么解决方案使其工作?

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

  1. 请求(客户端)端没有错误。但是服务器的响应说是The request sent by the client was syntactically incorrect。和响应头Response HTTP/1.1 400 Bad Request
  2. 请求体内容绝对没有差别。
  3. str_THIS_WA_URL variable指向与webapp相同的域,即AJAX请求位于当前域中。

在URL中添加时间戳(在下面的注释部分中使用shawn的建议)并没有解决这个问题。

EN

回答 1

Stack Overflow用户

发布于 2018-11-06 19:27:49

IE将此作为优化操作,因为它期望服务器使用HTTP/401凭据挑战进行应答,并且两次发送身体将是一种浪费。

在您的例子中,由于/welcome.do是用NTLM保护的,所以IE现在假设/和下面的所有东西都是安全保护空间的一部分,因此将无车身的POST优化应用于所有东西。

修复方法是将/welcome.do移动到/secured/welcome.do,并确保在/secured下没有不安全的资源。

这里有更多的细节:挑战-响应身份验证和零长度帖子

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49403936

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档