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

jQuery降级至1.1.0后Ajax请求出现“Refused to set unsafe header”错误

解决jQuery 1.1.0 Ajax "Refused to set unsafe header 'Connection'" 错误

这个问题的核心原因是jQuery 1.1.0是一个极其老旧的版本(发布于2006年),它的Ajax实现会自动尝试设置浏览器现在禁止的"Connection"请求头,而现代浏览器出于安全规范(XMLHttpRequest Level 2)不允许脚本设置这类"不安全"的请求头。至于为什么只有加载Google Captcha和支付iframe后才触发错误,大概率是这些第三方组件修改了全局的XMLHttpRequest对象或者触发了浏览器更严格的安全检查,让原本可能被忽略的问题暴露了出来。

下面是具体的解决办法,按优先级排序:

1. 优先升级jQuery版本(最推荐)

jQuery 1.1.0存在大量已知的安全漏洞、兼容性问题,以及像这样的过时API用法。如果客户坚持要用旧版本,至少说服他们升级到jQuery 1.x分支的最新稳定版(比如1.12.4)——这个版本已经修复了自动设置不安全请求头的问题,同时能兼容绝大多数旧浏览器,也能避免后续更多的兼容性坑。

只需要替换页面中引入的jQuery文件即可,无需修改你的Ajax调用代码。

2. 若必须保留jQuery 1.1.0,修改源码移除不安全头设置

如果升级完全不可行,你需要手动修改jQuery 1.1.0的源码,删除它自动设置"Connection"头的逻辑:

  • 下载jQuery 1.1.0的未压缩源码(不要用压缩版,无法修改)
  • 在源码中搜索字符串"Connection",会找到类似这样的代码行:
    xhr.setRequestHeader("Connection", "keep-alive");
    
  • 注释掉或者删除这一行代码
  • 重新压缩源码,替换页面中引入的jQuery文件

修改后,你的Ajax请求就不会再尝试设置这个被浏览器禁止的请求头了,你的示例代码不需要做任何改动:

var val = 'somename';
$.ajax({
 type: "GET",
 url: "/Home/Index",
 data: { 'Name': val },
 success: function (data) {
 // success logic
 }
});

3. 隔离第三方组件的影响(备选方案)

如果上述两种方法都无法实施,可以尝试隔离Google Captcha和支付iframe的全局影响:

  • 把这些第三方组件放在独立的沙箱iframe中,避免它们修改主页面的XMLHttpRequest对象
  • 或者尝试在加载第三方组件之前完成所有Ajax请求,但这种方法局限性很大,只适合特定场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:22:25