You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IE 11中jQuery AJAX POST请求随机出现Content-Length=0的原因排查

解决IE11下Spring MVC AJAX POST随机出现Content-Length=0的问题

我碰到过不少类似IE11下AJAX POST丢数据的情况,结合你的技术栈(Spring 4.3.1、Waffle SSO、jQuery 1.11.3、Tomcat 8.0.49),给你几个针对性的排查和解决方向:

1. 先搞定IE11的文档模式与缓存问题

IE11的兼容模式和缓存机制经常是AJAX问题的罪魁祸首,哪怕你设置了$.ajaxSetup({ cache: false });也可能有遗漏:

  • 强制页面使用IE11最新模式:在页面<head>里添加<meta http-equiv="X-UA-Compatible" content="IE=edge">,避免它自动切换到IE9/10等旧模式(旧模式下AJAX的请求处理逻辑差异很大)。
  • 给每个POST请求加唯一时间戳:在请求的data参数里手动拼接_t: new Date().getTime(),比如:
    $.post('/your/api/url', {
      // 你的业务参数
      username: 'xxx',
      _t: new Date().getTime()
    }, function(response) {
      // 处理响应
    });
    
    这种方式能彻底绕开IE11的缓存机制,比全局设置更可靠。

2. 排查Waffle SSO与IE11的交互冲突

Waffle做Windows身份验证时,IE11在会话过期重验证等场景下,可能会对POST请求做特殊处理导致请求体丢失:

  • 检查过滤器顺序:确保Waffle的身份验证过滤器在Spring MVC的DispatcherServlet之前执行,避免后续过滤器修改或截断请求体。
  • 调整Waffle的UA适配:在Waffle的配置里明确识别IE11的User-Agent,避免身份验证流程中误判浏览器类型导致请求异常。

3. 升级jQuery版本或调整AJAX配置

你用的jQuery 1.11.3虽然支持IE11,但存在一些边缘场景的兼容性bug:

  • 升级到jQuery 1.x系列的最新稳定版(比如1.12.4),这个版本修复了不少IE11下的AJAX问题,而且不会破坏现有代码的兼容性。
  • 放弃全局$.ajaxSetup,改为在每个AJAX请求中单独设置cache: false,有时候全局配置在IE11中不会被正确应用到所有请求实例。

4. 调整Tomcat的请求处理配置

Tomcat 8.0.49的某些默认配置可能和IE11的POST请求不兼容:

  • 修改maxPostSize参数:在Tomcat的server.xml的Connector节点里添加maxPostSize="-1"(Tomcat 8.0中如果设为0是不限制,但有些场景下IE11的请求头会导致Tomcat误判,设为-1更稳妥)。
  • 暂时关闭压缩测试:如果Tomcat开启了compression="on",IE11在解压缩请求时可能出现异常,先关闭压缩看看问题是否消失。

5. 抓包对比异常与正常请求

如果上面的方法都没解决,建议用Fiddler或者IE11自带的开发者工具抓包,重点对比:

  • 异常请求和正常请求的请求头、请求体是否完整,IE11是否发送了OPTIONS预请求或其他特殊请求。
  • 查看服务器端日志,确认是Tomcat截断了请求体,还是Spring MVC根本没接收到数据。

测试时记得清空IE11的缓存,确保每次测试都是干净的环境,避免旧缓存干扰结果。

内容的提问来源于stack exchange,提问作者Shiva

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 11:37:20