HSTS指的是HTTP严格传输安全协议HTTP严格传输安全协议,它可以使我们的上网更安全。

本站已经使用了https,当你访问本站的时候,你会发现地址栏旁边有一个锁。这个锁说明你的浏览器和网站的服务器在沟通的时候采用了加密。所以当你这本站输账号密码等等敏感信息的时候,你就可以不用担心这些的信息被黑客劫持。

但是你有没有想过,其实https并不安全。不安全的前提是你并没有输入完整的网址。

我个人很少遇到有人会在上网的时候手动把https这种协议头补全的,所以说浏览器就会先发出一个HTTP请求,这个请求适可劫持的。发出请求之后,服务器再通知浏览器跳转到HTTPS,当然这个过程也是可劫持的。也就是说,你尽管用HTTPS也不安全。

那么好了,这个不安全的前提就是你用了http的协议头,然后浏览器又不知道这个网站要跳转到https,所以在请求过程中就会发出一个未经加密的流量,你的信息就可能会被劫持。

2012年11月,HSTS标准被制定出来,这么一套标准很大的程度上解决这个问题。

这么一套标准的原理就在于它可以让你的浏览器知道某些网站必须得用https。

在这边我们简单的描述一下使用HSTS的浏览过程:首先你输入一个HTTP的网址,网站先发出一个HTTP请求,服务器告诉浏览器网站使用了HSTS,浏览器把这个信息记录下来,当你再次输入这个网站的某一个http网址时,浏览器就可以自己将http转换成https,这时候就可以发出https请求。

这样一看,HSTS的浏览过程还是存在漏洞的,因为浏览器一开始也不知道网站可以用HSTS,所以才刚开始就会发出一个http请求,这么一个请求还是可以被劫持的。

这个问题的解决方案,就是让浏览器在发出请求之前就可以知道网站使用HSTS。解决方案之一就是制定个文档,把所有可以使用HSTS的网站列出来,让浏览器查询一下这个文档就可以了,Google就在这样做。当然还有另外一个解决方案,就是把是否支持HSTS这个信息添加到DNS服务器里面去,目前这么个解决方案还没有得到普遍的实施。

当然,这么一套标准也会带来一些问题。HSTS设置了一个有效期标头,在有效期里面,浏览器在访问这个网站的时候就会一直使用https。那么如果网站在有效期内那个https证书失效了呢?那么浏览器在没有删除HSTS记录的情况下就不能浏览网站了。

目前本站已经启用了HSTS,并设置其有效标头为六个月。也就是说,从你现在第一次访问网站开始,之后的六个月浏览器就会一直使用https访问网站。那么六个月之后会不会失效了呢?除非你在六个月之内一直不访问网站,HSTS不会失效。你在六个月里一访问网站,HSTS的六个月会重置计时。