HTTP协议最初经过TCP传输,后为了传输安全,加入了SSL/TLS做为中间层,称为HTTPS(HTTP over SSL)。当在浏览器中输入一个域名访问时,浏览器默认会经过HTTP协议访问服务器,服务端能够返回301以跳转到HTTPS,此后全部数据传输经过HTTPS传输。然而,中间人攻击者可能会攻击拦截初始的http请求,从而控制用户后续的回话。html
HTTP Strict Transport Security,即HSTS协议提供了一个机制,让服务端能够主动告知浏览器,之后的请求所有严格地经过HTTPS进行。web
服务端向浏览器发送响应时,能够在响应头部中添加Strict-Transport-Security,告知浏览器开启HSTS。chrome
如响应头部中有Strict-Transport-Security: max-age=86400
表示为当前域名启用HSTS,过时时间为1天。浏览器
如响应头部中有Strict-Transport-Security: max-age=259200; includeSubDomains
表示为当前域名和全部的子域名启用HSTS,过时时间为30天。安全
Tips服务器
Strict-Transport-Security: max-age=0
)浏览器将关闭此域名的HSTS设置对于开启了HSTS的域名,浏览器将强制采用HTTPS。dom
在浏览器中访问域名时,若是域名开启了HSTS,浏览器将发生内部跳转,直接跳转到HTTPS进行访问。即便用户手动输入http://domainname访问,仍会发生强制跳转。google
网页中的资源,若是其URL的域名启用了HSTS,浏览器请求此资源时将自动跳转的HTTPS。 如网页中有连接<img src="http://qlee.in/static/logo.img>
,并且qlee.in开启了HSTS,浏览器将自动到https://qlee.in/static/logo.img请求相应的资源。firefox
HTTP默认采用80端口,HTTPS默认采用443端口。当浏览器由于HSTS执行内部跳转时code
HSTS中的Strict
不仅是强制跳转到HTTPS,也包含了对HTTPS链接创建的处理。开启HSTS后,一旦有警告或者错误,浏览器将直接关闭HTTPS链接。包括如下几种
服务端能够经过响应的添加头部Strict-Transport-Security: max-age=0
或者Strict-Transport-Security: max-age=0; includeSubDomains
来告知浏览器关闭域名的HSTS
对于chrome浏览器,地址栏中输入chrome://net-internals/#hsts
进入HSTS设置页面,能够查询、删除指定域名的HSTS设置,也能够手动为域名开启HSTS。
对于chrome和firefox浏览器,能够经过删除域名的历史记录来清除域名的HSTS设置。
google维护了一个称为“HSTS preload list”的站点域名和子域名列表,主流的web浏览器(Chrome, Firefox, Opera, Safari, IE 11 and Edge) 都采用了该域名列表,对列表中的域名强制开启HSTS。域名的全部者能够经过https://hstspreload.org/提交其域名。