非权威原因头字段 [HTTP]

54

我在查看响应头Non-Authoritative-Reason : HSTS时遇到了困难。

我已经进行了大量搜索,但只找到一些关于HSTS(从HTTP重定向到HTTPS)的解释。有人能帮我吗?顺便说一下,我正在使用Chrome浏览器。

谢谢。

3个回答

84

您正在尝试连接的服务器使用严格的传输安全性(HSTS)来确保仅使用https与该站点连接,而不是默认的http。

这意味着如果您输入http://www.servername.com,那么Chrome将自动将其转换为https://www.servername.com

这是一项安全功能,用于防止使用未加密的http,黑客可以读取和更改。服务器通过响应请求时发送的特殊HTTP标头告诉Chrome(通过设置HSTS),可以设置此功能。然后,Chrome会将此设置缓存给定的时间,该时间由标头中的max-age值定义。此外,网站所有者可以将其网站提交到预加载列表中,该列表会自动包含在Chrome中-这甚至保护了第一次访问,因为通常需要访问该网站以接收标头以激活此功能。

Chrome在网络选项卡中显示此方式是通过创建一个虚假的307响应,并重定向到地址的https版本。但这是一个虚假的响应,不是服务器生成的-实际上,Chrome在请求甚至到达服务器之前就已经内部完成了这个过程。

要清除某个站点的此设置,您可以在Chrome的URL字段中键入以下内容:chrome://net-internals/#hsts,然后搜索您的站点并将其删除。您还可以在顶级域和包括子域的情况下设置此项,因此您可能需要从那里删除。或者,您可以仅更改服务器配置以发布具有最大年龄为0的标头,并重新访问该站点以清除此设置,然后停止发布标头,这对于其他浏览器很有帮助,因为不太容易清除此设置。
请注意,如果一个站点在预加载列表中,则无法清除此设置,因为它嵌入在网页浏览器的代码中。站点所有者可以提交请求以从预加载列表中删除,但这需要几个月才能通过Chrome的发布周期,并且没有其他浏览器的定义时间表。出于安全原因,Chrome也不提供覆盖预加载设置的方法。

1
有没有办法清除Chrome缓存中触发此问题的网站?我正在调试我的Apache反向代理配置。 - Gogowitsch
添加了我的回答的细节。 - Barry Pollard
1
那是Chrome的预加载列表。其他浏览器也有其他的列表。 - Barry Pollard
嗯,我遇到了类似的问题。我尝试清除网站chrome://net-internals/#hsts,但是我在那里找不到一个。但是我仍然会收到响应头Non-Authoritative-Reason: HSTS。当我在Firefox中尝试相同的操作时,相同的网站URL可以正常工作,但是在Chrome中却会出现HSTS。有没有其他解决此问题的方法? - Thayz
1
检查顶级域名是否设置了标头。例如,它可能在使用includeSubDomain选项的example.com上设置,但您只检查了www.example.com。 - Barry Pollard

11

针对BazzaDP的回答,还有一些额外的信息...

响应中返回的Non-Authoritative-Reason : HSTS并非由您配置,而是由Chrome自己添加的。由于Chrome劫持了请求,因此Chrome还将添加此特定标头以告知HSTS已启用。查看网络选项卡,您将看到带有此标头设置的虚假307响应。

所有这些都是因为在服务器上包含了Strict-Transport-Security标头。

如果您想全力以赴,这里是HSTS预加载列表


1

根据MDN (https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security)的说法:

当您的网站使用 HTTP 访问时,浏览器会忽略 Strict-Transport-Security 头;这是因为攻击者可能会拦截HTTP连接并注入或删除标头。

HSTS预加载列表deployment recommendations提到:

Strict-Transport-Security 头添加到所有 HTTPS 响应中

HTML5 Boilerplate展示了如何仅在HTTPS上设置 Strict-Transport-Security (在apache中):

# 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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接