HTTP Strict Transport Security(HSTS)

HTML  2022-09-23 00:31  326  

今天遇到个有趣的现象

我的一个网站同时支持http和https,但没有做强制跳转,但是当我以http方式访问时,总是会跳转到https站点,f12看到有一个307跳转:

网上查了下资料,了解到HSTS - HTTP Strict Transport Security

HSTS的作用是强制客户端(如浏览器)使用HTTPS与服务器创建连接

HSTS相对于传统301/302跳转,有如下优点

1. HSTS更快,  HSTS采用307方式进行跳转,307状态码与301/302 状态码不同,它并不是服务器返回的,而是浏览器本地自动生成,即在浏览器本地自动发生了 http 到 https 的跳转,与网站服务器没有任何交互。

2. HSTS更安全, 服务器配置好HSTS后, 只需手动使用https访问一次网站, 在HSTS的max-age属性到期之前,都由浏览器内部使用307状态码进行https跳转, 降低了301/302跳转时http协议造成的中间人攻击风险


HSTS需要在网站的web服务器进行配置,但是我发现在chrome中在网站没有配置hsts时也会出现hsts的307跳转, 那是因为chrome会记录手动访问过的https页面, 当在浏览器成功使用https访问过一次该网站后, 下次使用http方式访问时, chrome会进行307跳转, 重定向到https站点,就是最上面图的那个样子, 但是这个方式的有效期我不知道是多久

nginx的HSTS配置方式

在nginx配置文件中server里面添加

add_header Strict-Transport-Security "max-age=172800; includeSubDomains"

具体说明看这里 https://www.cnblogs.com/tugenhua0707/p/10945934.html


通过以下方式可以查看chrome浏览器的hsts规则

在chrome地址栏中输入 chrome://net-internals/#hsts 

在Query HSTS/PKP domain这一栏输入要查询的地址,如果存在HSTS规则, 会在下面列出HSTS信息,否则显示Not found:



参考文章:

解决"chrome浏览器访问http网址自动跳转https“问题
浅析chrome新特性之默认使用HTTPS,追溯源头至HSTS
HTTP Strict Transport Security实战详解
nginx开启HSTS让浏览器强制跳转HTTPS访问

发布于 2022-09-23 00:31, 最后修改于2022-09-23 00:54