一般情况下我们在浏览器中访问一个网站都是以http形式访问的。但是一些网站,比如购物网站由于需要支付,所以需要使用到更加安全的https的访问方式。
那么服务器是怎么让浏览器实现自动转换为访问https的呢?
例子
在浏览器输入http://www.taobao.com
,并且按F12
查看服务器给我们发来了什么消息
注意上面我用红色方框圈出的地方,后面我会讲到。
接着,我们直接访问https://www.taobao.com
会怎么样呢?
仔细对比两张图的红色方框部分,可以看出,访问http
比https
多了两个文件(响应头),其中第一个文件最重要,就是因为这个文件,告诉浏览器应该以https
重新访问网站。
第一种图右边有两个方框,主要就是这两个信息Status Code: 307 Internal Redirect
和Non-Authoritative-Reason: HSTS
,接下来就说下这两个信息是什么信息.
Status Code: 307 Internal Redirect
状态代码:307,交互重定向。其实也不一定是307,有些网站是302。
3xx状态码就是告诉客户端,请求的URI不存在,需要去访问另外一个URI。
HSTS
HSTS(HTTP Strict Transport Security)国际互联网工程组织IETF正在推行一种新的Web安全协议。
HSTS最为核心的是一个HTTP响应头(HTTP Response Header)。正是它可以让浏览器得知,在接下来的一段时间内,当前域名只能通过HTTPS进行访问,并且在浏览器发现当前连接不安全的情况下,强制拒绝用户的后续访问要求。
HSTS Header的语法如下:
Strict-Transport-Security: <max-age=>[; includeSubDomains][; preload]
- max-age是必选参数,是一个以秒为单位的数值,它代表着HSTS Header的过期时间,通常设置为1年,即31536000秒。
- includeSubDomains是可选参数,如果包含它,则意味着当前域名及其子域名均开启HSTS保护。
- preload是可选参数,只有当你申请将自己的域名加入到浏览器内置列表的时候才需要使用到它。关于浏览器内置列表,下文有详细介绍。
比如上面的网站中:
有了这个就是告诉浏览器接下来的31536000s中,使用https
访问网站。
完整的HSTS流程图如下:
撩我?可以搜索我的公众号:Kyda