HSTS(HTTP Strict Transport Security) 简单来说就是由浏览器进行http向https的重定向。如果不使用HSTS,当用户在浏览器中输入网址时没有加https,浏览器会默认使用http访问,所以对于https站点,通常会在服务端进行http至https的重定向。如果用了HSTS,就可以减少服务端的这次重定向。
当我们部署https时,发现HSTS的这个用处后,立马就使用了它,使用方法很简单——在响应头中加上 strict-transport-security:max-age=31536000 。
但后来通过星巴克的WiFi访问我们的https站点时发现了一个问题。在浏览器中输入网址后,没有出现星巴克WiFi的登录页面,而是浏览器认为这是不安全连接,不允许访问,只能先访问一个http站点,出现星巴克WiFi登录页面并完成登录后才能访问我们的https站点。
背后的原因很简单,由于我们的站点启用了HSTS,浏览器默认会以https方式发出请求,星巴克的WiFi拦截了请求,以http的方式返回了WiFi登录页面,浏览器收到后一看这不安全,立马停止连接。如果不启用HSTS,在服务端进行重定向,就不会有这个问题。
只要基于http进行验证的WiFi都会有这个问题,所以在部署https时是否启用HSTS需要考虑这个因素。如果你原先启用HSTS,现在想取消,不能直接去掉strict-transport-security响应头,而是要改为 strict-transport-security:max-age=0 ,不然之前使用了HSTS的浏览器在过期之前会一直使用HSTS。