如何解决JavaScript中请求被强制调用HTTPS的报错问题
问题解决方案
1. 变量未定义报错修复
你代码里eventSource.onerror回调的参数是event,但内部打印时用了未定义的变量e,直接修改即可:
eventSource.onerror = (event) => { if (event.readyState == EventSource.CLOSED) { console.log('sse close'); } else { console.log("onerror", event); // 把e改成event } }
另外你的代码里同时发起了XMLHttpRequest和EventSource两个相同路径的请求,SSE功能只需要保留EventSource即可,建议删除多余的XHR请求代码避免不必要的冲突。
2. HTTP被强制转为HTTPS的问题解决
按优先级逐一排查:
- 排查HSTS配置
浏览器的HTTP严格传输安全策略会强制将指定域名的HTTP请求转为HTTPS,本地排查步骤:- Chrome浏览器地址栏输入
chrome://net-internals/#hsts - 在
Query HSTS/PKP domain输入框中输入localhost查询,如果返回存在记录,在下方Delete domain security policies输入localhost删除即可。
- Chrome浏览器地址栏输入
- 排查混合内容拦截
如果你当前打开的页面本身是HTTPS协议,浏览器会自动拦截所有HTTP请求并尝试升级为HTTPS,解决方案:本地开发时统一用HTTP协议打开页面,或者给本地8330端口的服务配置自签HTTPS证书,统一用HTTPS访问。 - 排查CSP配置
检查页面响应头或者HTML的meta标签中是否存在Content-Security-Policy: upgrade-insecure-requests配置,该配置会强制所有HTTP请求升级为HTTPS,删除该配置即可。 - 排查全局请求拦截
先硬编码测试url,把url写死为http://localhost:8330/itf/subscribe后测试,如果还是跳转HTTPS则排除变量问题;如果硬编码后正常,检查_EVENT_PUSH_ENDPOINT变量是否存在隐藏字符,或者项目全局是否有请求拦截逻辑修改了请求协议。
内容的提问来源于stack exchange,提问作者emarwa.mouma.35t
相关产品推荐
相关产品推荐

