Strict-Transport-Security HTTP 头造成的重定向

Strict-Transport-Security(HSTS) HTTP 头可以告诉浏览器使用强制的更高安全控制,比如当访问到的 SSL/TLS 证书异常时,浏览器会拒绝让用户添加例外(如下图,没有 HSTS 头的时候,Firefox 会有个让用户添加例外的选项,用户可以忽略这个证书异常,继续访问网站。如果是下图的情况,用户登录了这个伪装为 onedrive 的网站,恐怕后果就很严重了),或者是让浏览器以后都默认使用 TLS 协议访问这个网站,而不用再通过 80 端口去重定向(这个时候也是很容易被攻击的)。

但有时候 HSTS 头的不当使用也会造成问题,比如一些站点的莫名无法访问——明明在地址栏输入的是 http:// 但是却老是会自动跳转到 https://,这个时候我们往往会以为在服务器端有什么重定向,但是经过检查却没有!
经过检查,Chrome 或者 Firefox 都有此问题,但是 IE 却没有,所以可以怀疑是浏览器这头做的跳转。
其实就是 HSTS 的 includeSubDomains 这段区域造成的,这段参数使得浏览器在访问每个子站点都会走 TLS 协议

解决办法:服务器上面去掉这个参数,并且在浏览器中也需要清除这个记录,Chrome 可以访问 chrome://net-internal/#hsts 这个地址,查看和删除已经存在的站点,Firefox 则只能选择忘记整个站点的记录来清除。IE 目前还不支持 HSTS(Windows 10 会支持,但还在开发当中),所以没有此问题。