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列表中删除某站点

明确了问题,那如何删除该站点配置呢。

  1. 访问 chrome://net-internals/#hsts
  2. 在表单项Query HSTS/PKP domain,输入目标域名,点击搜索,如果能搜索到,证明安全策略起作用
  3. 在表单项Delete domain security policies,输入目标域名,点击删除即可

删除成功后,重新HTTP访问站点,发现不会重现重定向HTTPS问题了

有效期

发现HSTC删除域名后过一段时间还是会出现自动切换到HTTPS,看来存在有效期问题,目前没找到办法,遇到该情况,重新执行上述操作。

写在最后

  1. 该方法仅用于解决网站没有开启HTTPS,但浏览器却强制要求走HTTPS进而报错问题。

  2. 虽说解决了问题,但仍然建议上HTTPS,毕竟安全提升了不少。