HTTP Strict Transport Security HSTS
HTTP Strict-Transport-Security (通常简称为HSTS) response header用来通知浏览器应该只通过HTTPS访问该站点,并且以后使用HTTP访问该站点的所有尝试都应自动重定向到HTTPS。
语法
Strict-Transport-Security: max-age=<expire-time> Strict-Transport-Security: max-age=<expire-time>;includeSubDomains Strict-Trransport-Security: max-age=<expire-time>;includeSubDomains;preload
指令:
max-age=<expire-time>: 浏览器通过HTTPS访问站点的最大时间(单位为秒)
includeSubDomais(options): 是否包含该网站的所有子域名
preload(options): 当使用preload,max-age指令必须至少是31536000(一年),并且必须保存在includeSubDomains指令。
如果网站接受HTTP请求然后重定向到HTTPS,用户可能在重定向之前通过没有加密的方式与服务器通信。
网站通过HTTP Strict Transport Security header通知浏览器,这个网站禁止使用HTTP方式加载,并且浏览器应该自动吧所有尝试使用HTTP的请求自动替换成HTTPS请求。
Notes: Strict-Transport-Security header在通过HTTP访问时会被浏览器忽略。只有在你的网站通过HTTPS访问并且证书没有错误时,浏览器才认为你的网站支持HTTPS,然后遵守Strict-Transport-Security header.浏览器这样做是因为攻击者可以拦截到站点的HTTP连接,然后注入或者删除header。
浏览器如何处理
你的网站第一次通过HTTPS请求,服务器响应Strict-Transport-Security header,浏览器记录下这些信息,然后后面尝试访问这个网站的请求都会自动把HTTP替换成HTTPS。
当Strict-Tranport-Security header设置的过期时间到了,后面通过HTTP的访问恢复正常模式,不会再自动重定向到HTTPS。
每次浏览器接收到Strict-Tranport-Security header,它都会更新这个网站的过期时间,所以网站可以刷新这些信息,防止过期发生。如果禁用Strict-Transport-Security的需求,将max-age设置为0,将立即使Strict-Transport-Security header失效,从而可以通过HTTP访问。
预加载HSTS
谷歌维护着一个HSTS预加载服务,按照如下指示成功提交你的域名后,浏览器将会永不使用非安全的方式连接你的域名。虽然该服务是由谷歌提供的,但所有的浏览器都在使用这个预加载列表。但是这不是HSTS标准的一部分,也不该当做正式的内容。
Strict-Transport-Security: max-age=63072000;includeSubDomains;preload