你所不知道的永利网址: HSTS

你所不知道的 HSTS

2015/10/24 · HTML5 ·
HSTS

原文出处:
李靖(@Barret李靖)   

很多人听说过也看到过 301、302,但是几乎从来没有看到过 303 和 307
的状态码。今天在淘宝首页看到了 307 状态码,于是摸索了一把。

HSTS

302 跳转是由浏览器触发的,服务器无法完全控制,这个需求导致了 HSTS(HTTP
Strict Transport Security)的诞生。HTSP 就是添加 header 头(add_header
Strict-Transport-Security
max-age=15768000;includeSubDomains),告诉浏览器网站使用 HTTPS
访问,支持HSTS的浏览器就会在后面的请求中直接切换到 HTTPS。在 Chrome
中会看到浏览器自己会有个 307 Internal Redirect
的内部重定向。在一段时间内也就是max-age定义的时间,不管用户输入
www.liberalman.cn
还是
http://www.liberalman.cn
,都会默认将请求内部跳转到https://www.liberalman.cn

采用HSTS协议的网站将保证浏览器始终连接到该网站的HTTPS加密版本,不需要用户手动在URL地址栏中输入加密地址。

该协议将帮助网站采用全局加密,用户看到的就是该网站的安全版本。

HSTS的作用是强制客户端(如浏览器)使用HTTPS与服务器创建连接。服务器开启HSTS的方法是,当客户端通过HTTPS发出请求时,在服务器返回的超文本传输协议响应头中包含Strict-Transport-Security字段。非加密传输时设置的HSTS字段无效。

比如,https://www.liberalman.cn
的响应头含有Strict-Transport-Security: max-age=31536000;
includeSubDomains。这意味着两点:
在接下来的一年(即31536000秒)中,浏览器只要向xxx或其子域名发送HTTP请求时,必须采用HTTPS来发起连接。比如,用户点击超链接或在地址栏输入
http://www.liberalman.cn/
,浏览器应当自动将 http 转写成 https,然后直接向
https://www.liberalman.cn/
发送请求。

在接下来的一年中,如果
www.liberalman.cn
服务器发送的TLS证书无效,用户不能忽略浏览器警告继续访问网站。

服务器端配置HSTS,减少302跳转,其实HSTS的最大作用是防止302
HTTP劫持。HSTS的缺点是浏览器支持率不高,另外配置HSTS后HTTPS很难实时降级成HTTP。同时,也建议启用SPDY来提高性能,不累述。

小结

本文简单说明了 HSTS 的基本原理和相关内容,他在全站 https
下有一个较大的正向作用,推荐使用。

P.S:在 Chrome
中打开 chrome://net-internals/#hsts,添加域名之后,可以让浏览器强制对该域名启用
https,所有的 http 请求都会内部转到 https。

1 赞 收藏
评论

永利网址 1

302跳转

通常将 HTTP 请求 302 跳转到 HTTPS,但有问题:

1.不安全,302 跳转会暴露用户访问站点,易被劫持。

2.多增加一次访问,使得客户端响应速度慢。302 跳转需要一个 RTT(The role
of packet loss and round-trip time),浏览器执行跳转也需要时间。

307 状态码

在 GET、HEAD 这些幂等的请求方式上,302、303、307 没啥区别,而对于 POST
就不同了,大部分浏览器 都会302 会将 POST 请求转为 GET,而 303
是规范强制规定将 POST 转为 GET 请求,请求地址为 header
头中的 Location,307 则不一样,规范要求浏览器继续向 Location 的地址
POST 内容。

而在 HSTS 中,307 可以被缓存,缓存时间根据 max-age 而定,一般建议缓存 1
年甚至更长。

浏览器支持

Chromium和Google Chrome从4.0.211.0版本开始支持HSTS

Firefox 4及以上版本

Opera 12及以上版本

Safari从OS X Mavericks起

Internet Explorer从Windows
10技术预览版开始支持,之后微软又向IE11用户推送了支持HSTS的更新。