当我有响应标题Non-Authoritative-Reason : HSTS
我搜索过很多但只是想出了一些关于HSTS的解释(从HTTP重定向到HTTPS)。任何人都可以帮助我吗?顺便说一句,我正在使用Chrome。
由于
答案 0 :(得分:54)
您尝试连接的服务器使用strict-transport-security(HSTS)来确保https仅用于此站点,而不是默认的http。
这意味着如果您输入http://www.servername.com,则Chrome会自动将其转换为https://www.servername.com。
这是一项防止使用http的安全功能,http是未加密的,可由黑客读取和更改。这可以通过服务器设置Chrome(通过响应请求发送的特殊HTTP标头)来设置它使用HSTS。然后Chrome会根据该标头中的max-age值定义给定的时间内缓存此设置。此外,网站所有者可以将自己的网站提交到Chrome中自动加载的预加载列表 - 这样即使是第一次访问也会受到保护,因为通常您需要访问该网站以接收标题以激活此功能。
Chrome在网络标签中显示的方式是创建一个虚拟307响应,并重定向到https版本的地址。但这是一个虚假的回应而且不是由服务器生成的 - 事实是Chrome在请求甚至进入服务器之前就在内部做了。
要清除网站的此设置,您可以在Chrome的网址字段中输入以下内容:chrome://net-internals/#hsts
,然后搜索您的网站并将其删除。您也可以在顶级域中设置此项并包含子域,以便您可能需要从中删除。或者,您可以更改服务器配置以发布max-age为0的标头,然后重新访问该网站以清除此标题,然后停止发布标头,这对于其他浏览器很有帮助,因为它不太容易清除它。
请注意,如果站点位于预加载列表中,则无法清除此设置,因为它嵌入在Web浏览器的代码中。网站所有者可以提交要从预加载列表中删除的请求,但这需要几个月的时间才能完成Chrome的发布周期,而且其他浏览器没有明确的时间表。出于安全原因,Chrome也无法覆盖预加载的设置。
答案 1 :(得分:3)
BazzaDP的一些额外信息答案......
响应中返回的Non-Authoritative-Reason : HSTS
不是您配置的内容,而是Chrome本身。由于Chrome会劫持该请求,Chrome也会添加此特定标头以告知HSTS已启用。查看网络选项卡,您将看到带有此标头集的假307响应。
所有这一切都已完成,因为您在您的服务器上包含了Strict-Transport-Security
标题。
如果您想全力以赴,请点击HSTS preload list
答案 2 :(得分:0)
根据MDN(https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security):
Strict-Transport-Security
标头在以下情况下会被浏览器忽略 您的网站是通过 HTTP 访问的;这是因为攻击者可能 拦截HTTP连接并注入标头或将其删除
HSTS预载列表deployment recommendations提到:
将
Strict-Transport-Security
标头添加到所有 HTTPS 响应
HTML5 Boilerplate显示了如何仅通过HTTPS(在Apache中)设置Strict-Transport-Security
:
# Set 'Strict-Transport-Security' over HTTPS only!
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteCond %{HTTP_HOST} ^www\.(.+)$ [NC]
RewriteRule ^ %{ENV:PROTO}://%1%{REQUEST_URI} [R=301,L]
</IfModule>