HSTS跳转HTTPS时浏览器偶发使用80端口访问的问题咨询
HSTS跳转偶发HTTPS请求走80端口根因
先看两组请求的核心差异点:
- 正常流程的首次307状态标记为307 Internal Redirect,这是浏览器本地HSTS缓存生效的典型特征:浏览器不会将初始HTTP请求发送到网络,直接在内部完成协议替换,后续HTTPS请求默认走443端口,完全符合预期逻辑。
- 故障流程的首次307状态标记为307 Temporary Redirect,且明确显示远程地址为
:80,说明这个跳转并非浏览器本地HSTS触发——浏览器确实将明文HTTP请求发送到了目标服务的80端口,由80端口上部署的负载均衡、前置代理等服务返回了跳转响应,不属于浏览器内部跳转行为。
HTTPS请求偶发走80端口由以下三类概率性触发场景导致,完全匹配偶发故障的特征:
- HSTS本地缓存未命中
浏览器动态HSTS缓存并非永久可靠,以下场景都会导致本地无对应域名的HSTS记录,进而主动发起80端口的HTTP请求:- 用户首次访问该域名,尚未收到过服务端返回的HSTS响应头
- 用户手动清理浏览器缓存、浏览数据
- 无痕/隐私浏览模式关闭后,临时存储的HSTS缓存被自动清空
- HSTS头配置的
max-age到期,缓存续期存在时间空窗 - 旧版浏览器存在已知缺陷:WiFi/有线/VPN切换等网络变动场景下,会偶发清空已存储的动态HSTS缓存
- 浏览器内核端口继承逻辑缺陷
当307跳转由网络侧服务(而非浏览器本地HSTS)返回时,Chromium 90~105区间版本、部分定制内核国产浏览器存在确定性逻辑bug:如果跳转响应的Location头仅标注https://域名未显式指定443端口,浏览器建立后续HTTPS连接时,会错误继承上一个HTTP请求的目标端口80,而非使用HTTPS默认的443端口,这就是HTTPS请求远程地址显示为IP:80的直接原因。 - 代理规则偶发加载异常
如果客户端配置了PAC自动代理、全局代理,网络环境切换时可能出现代理规则加载不完整的问题:代理收到80端口的HTTP请求并返回跳转响应后,未正确更新后续连接的端口路由表,错误将HTTPS请求转发到目标IP的80端口,这类问题在跨内网、混合云访问场景下出现概率更高。
本次业务故障的另一诱因是负载均衡配置缺陷:80端口监听器未做入站协议校验,直接将收到的HTTPS加密流量按HTTP协议转发给后端业务池,最终命中错误端点引发访问异常。
修复方案
- 负载均衡侧:在80端口监听器增加协议识别规则,入站流量匹配HTTPS Client Hello特征时,直接返回307跳转至443端口,或直接重置连接,禁止将这类异常流量转发至后端业务节点
- 域名侧:将业务域名提交至浏览器HSTS预加载列表,预加载域名的HSTS规则会直接内置在浏览器安装包中,从根源避免发起80端口明文HTTP请求,彻底解决HSTS缓存未命中问题
- 终端侧:内部固定用户场景可通过组策略统一推送浏览器版本更新,升级至最新稳定版内核,修复旧版本存在的端口继承逻辑缺陷
内容的提问来源于stack exchange,提问作者Niel Verheire
相关产品推荐
相关产品推荐

