Chrome下访问WEB遇到307重定向HTTPS报错
今天访问Web突然报错,原来是网站被重定向到HTTPS,而请求API服务仍然是HTTP,Chrome安全策略进行了拦截,从而报错。
为什么会突然出现重定向到HTTPS呢,经过排查,最终发现原来是Chrome下的HSTS导致。
这里围绕着这个问题排查过程总结梳理下。
307
通过network,查看请求在发起后307重定向
到HTTPS。而HTTPS安全链接下发起不安全的HTTP请求,浏览器会实现拦截,报错即如此。
307是由谁发起的呢,理论上后台/浏览器都可以做到,查看response ,发现header中有这样一个字段
1 | Non-Authoritative-Reason: HSTS |
查询发现这是浏览器的一个安全策略,同时询问运维得之服务并没有开启HTTPS,那就肯定是我本地的问题,综合断定是这里的问题
HSTS
HTTP严格传输安全(英語:HTTP Strict Transport Security,縮寫:HSTS)是一套由互联网工程任务组发布的互联网安全策略机制。网站可以选择使用HSTS策略,来让浏览器强制使用HTTPS与网站进行通信,以减少会话劫持风险。
也就是说通过HSTS设定可以强制让某域名站点一定使用HTTPS进行通讯。我这里的问题便是浏览器对该域名开启了HSTS。
从HSTC Domain列表中删除某站点
明确了问题,那如何删除该站点配置呢。
- 访问 chrome://net-internals/#hsts
- 在表单项
Query HSTS/PKP domain
,输入目标域名,点击搜索,如果能搜索到,证明安全策略起作用 - 在表单项
Delete domain security policies
,输入目标域名,点击删除即可
删除成功后,重新HTTP访问站点,发现不会重现重定向HTTPS问题了
有效期
发现HSTC删除域名后过一段时间还是会出现自动切换到HTTPS,看来存在有效期问题,目前没找到办法,遇到该情况,重新执行上述操作。
写在最后
该方法仅用于解决网站没有开启HTTPS,但浏览器却强制要求走HTTPS进而报错问题。
虽说解决了问题,但仍然建议上HTTPS,毕竟安全提升了不少。