Chrome中使用fetch()发起HTTP请求自动转为HTTPS报错如何解决
问题原因分析
- HSTS(HTTP严格传输安全)规则缓存:如果目标域名之前返回过HSTS响应头,Chrome会长期缓存该规则,强制所有对该域名的请求走HTTPS协议,不会发起HTTP请求。
- 永久重定向缓存:如果之前访问该域名时,服务器返回过301/302重定向到HTTPS地址,Chrome会缓存该重定向规则,后续请求直接跳转到HTTPS地址。
- 混合内容自动升级:如果你当前打开的控制台所在页面本身是HTTPS协议,Chrome默认会自动将页面内发起的HTTP请求升级为HTTPS,拦截混合内容请求。
- 浏览器全局安全设置/扩展影响:如果开启了Chrome的「始终使用安全连接」全局开关,或者安装了HTTPS Everywhere类强制升HTTPS的扩展,也会自动将所有HTTP请求转为HTTPS。
可行解决方向
- 清除HSTS缓存:打开Chrome地址栏输入
chrome://net-internals/#hsts,在「Delete domain security policies」输入目标域名,点击删除后重试。 - 禁用缓存测试:打开控制台Network面板,勾选「Disable cache」后重新发起请求,确认是否是重定向缓存导致的跳转。
- 允许混合内容:如果当前页面是HTTPS协议,可以点击地址栏左侧锁形图标→站点设置→找到「不安全内容」选项,修改为允许,临时允许该页面发起HTTP请求。
- 排查全局设置与扩展:先临时禁用所有浏览器扩展,再进入Chrome设置→隐私和安全→安全,关闭「始终使用安全连接」开关后重试。
- 修复请求代码问题:当前fetch代码中直接传入对象作为body参数会导致请求体异常,需要序列化为JSON字符串,修改为
body: JSON.stringify({data:["g@g.com"]})即可。
内容的提问来源于stack exchange,提问作者Feather Ridgemont
相关产品推荐
相关产品推荐

