HSTS 与 307 状态码

时间:2023-03-09 08:00:03
HSTS 与 307 状态码

最近线上产品突然在 Chrome 浏览器上出现 307 状态码,并跳转到 https 版。由于 https 尚未部署完毕,导致了相当严重的后果。

但是 307 代码是什么含义呢?页面又为何会出现 307 状态码呢?我之前都没见过这个状态码,查了才知道原来它也是一种重定向。

浏览器刚开始出现 307 状态码的我的第一反应是后端代码是不是又写了什么奇怪的东西进去。但是后来发现后端代码并没有响应这个状态码,然后我又翻了 Nginx 配置等东西,也没发现什么不和谐的地方。并且之后测试时即使断开网络,浏览器依然会出现 307。于是我认为这是 Chrome 自己捣鼓出来的东西。

问了下谷歌才知道还有 HSTS 这东西。而且确实在服务器响应的头中找到了 Strict-Transport-Security。那么解决这个问题首先就应该干掉这个头。但即使把这个头干掉,其 max-age 以让会生效。所以还需要清掉 max-age 才可以恢复已经被污染的客户端环境。造成这个问题的原因就是因为误加了 Strict-Transport-Security 这个响应头。从它的名字就可以看出它大概是干什么的了。这个头本身并没什么问题,它的作用就是强制客户度使用 https。但由于自己的 https 还没部署好,所以加了这个头就作死了。

至于 307 状态码,其实就是个重定向而已。比起 301 和 302 这些,307 重定向是可以把 POST 的数据也一并重定向的。