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

如何阻止jQuery自动将HTTP请求转为HTTPS?已开启混合内容允许

解决jQuery自动将HTTP请求转为HTTPS的问题

我之前也碰到过一模一样的情况——在HTTPS页面用jQuery的$.getJSON()或$.get()请求HTTP资源时,框架自动把协议转成HTTPS导致连接失败,哪怕已经手动开启了混合内容允许。下面是几个亲测有效的解决办法:

方法一:改用原生XMLHttpRequest

jQuery的AJAX方法可能内置了协议升级的安全逻辑(尤其是较新的版本),但原生的XMLHttpRequest不会自作主张修改请求协议。只要浏览器允许混合内容,这个方法能直接绕过问题:

const xhr = new XMLHttpRequest();
xhr.open('GET', 'http://host.com:1234/stats', true);

xhr.onload = function() {
  if (this.status >= 200 && this.status < 300) {
    // 解析返回的JSON数据
    const statsData = JSON.parse(this.responseText);
    // 这里编写你的数据处理逻辑
    console.log('获取到数据:', statsData);
  } else {
    console.error('请求失败,状态码:', this.status);
  }
};

xhr.onerror = function() {
  console.error('网络连接错误,无法访问目标地址');
};

xhr.send();

方法二:用jQuery的ajaxPrefilter强制保留HTTP协议

如果你不想放弃jQuery的便捷性,可以通过全局拦截AJAX请求,手动修正URL的协议,阻止jQuery自动升级:

// 全局拦截AJAX请求,针对特定地址强制使用HTTP
$.ajaxPrefilter(function(options) {
  // 匹配你的目标HTTP地址前缀
  const targetDomain = 'http://host.com:1234';
  if (options.url.startsWith(targetDomain)) {
    // 确保URL始终是HTTP,替换可能被修改的HTTPS前缀
    options.url = options.url.replace(/^https:/, 'http:');
    // 开启跨域支持(如果目标地址和当前页面域名不同)
    options.crossDomain = true;
  }
});

// 之后正常使用jQuery的AJAX方法即可
$.getJSON('http://host.com:1234/stats')
  .done(function(data) {
    console.log('请求成功:', data);
  })
  .fail(function(error) {
    console.error('请求失败:', error);
  });

额外排查点

如果上面的方法还是不行,建议检查:

  • 浏览器是否真的启用了混合内容允许:有些浏览器需要手动点击地址栏的警告图标,确认允许加载不安全内容
  • 当前页面是否有Content-Security-Policy(CSP)限制:查看浏览器控制台的CSP相关报错,如果是你自己的网站,可以调整CSP规则放宽限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:49:29