如何阻止Fetch请求localhost时自动重定向至HTTPS?
问题原因
这是浏览器的**自动升级不安全请求(Upgrade Insecure Requests)**机制导致的:当当前页面运行在HTTPS环境下时,浏览器会自动将页面内发起的所有HTTP请求强制升级为HTTPS请求,以此规避混合内容带来的安全风险——哪怕你在代码里明确写的是http://localhost:105,浏览器也会偷偷替换成https://localhost:105,而你的本地服务并未配置HTTPS,因此出现SSL协议错误。
而在http://localhost:105/hello/页面里执行代码正常,是因为当前页面本身就是HTTP环境,不存在混合内容的安全限制,浏览器不会触发请求升级。
解决方法
1. 标记本地HTTP服务为安全来源(Chrome专属)
适合开发环境快速解决:
- 在Chrome地址栏输入
chrome://flags/#unsafely-treat-insecure-origin-as-secure - 启用该选项,在输入框中添加
http://localhost:105 - 重启Chrome后,浏览器会将这个HTTP origin视为安全来源,不再强制升级请求
2. 禁用HTTPS页面的请求升级策略
如果你能控制那个HTTPS页面的代码,可以通过内容安全策略(CSP)明确禁止请求升级:
- 在页面头部添加meta标签:
<meta http-equiv="Content-Security-Policy" content="upgrade-insecure-requests 'none';"> - 或者通过后端给HTTPS页面返回响应头:
Content-Security-Policy: upgrade-insecure-requests 'none';
3. 清除HSTS缓存(如果存在)
如果浏览器之前曾对localhost:105记录过HSTS(HTTP严格传输安全)策略,也会强制跳转HTTPS:
- 在Chrome地址栏输入
chrome://net-internals/#hsts - 找到「Delete domain security policies」,输入
localhost:105后点击「Delete」
内容的提问来源于stack exchange,提问作者Lerner Zhang
相关产品推荐
相关产品推荐

