什么是“升级-不安全-请求”;HTTP头吗?

我向一个HTTP(非https)站点发送了一个POST请求,在Chrome的开发人员工具中检查了请求,并发现它在发送到服务器之前添加了自己的头:

Upgrade-Insecure-Requests: 1

Upgrade-Insecure-Requests上进行搜索后,我只能找到关于服务器发送报头的信息:

Content-Security-Policy: upgrade-insecure-requests

这似乎是相关的,但仍然非常不同,因为在我的情况下,客户端是在请求中发送报头,而我所找到的所有信息都是关于服务器在响应中发送相关的报头。


那么为什么Chrome (44.0.2403.130 m)添加Upgrade-Insecure-Requests到我的请求,它做什么?


更新2016-08-24:

这个头文件后来被添加为W3C候选推荐,现在已被正式承认。

对于那些刚刚遇到这个问题并感到困惑的人,西蒙·伊斯特的优秀的答案很好地解释了它。

Upgrade-Insecure-Requests: 1头文件曾经是HTTPS: 1 在之前的W3C工作草案中,在正式接受之前被Chrome重新命名为静静地< em > < / em >

(这个问题是在过渡期间提出的,当时没有关于这个头文件的官方文档,Chrome是唯一发送这个头文件的浏览器。)

179693 次浏览

简单回答:它与Content-Security-Policy: upgrade-insecure-requests响应头密切相关,表明浏览器支持它(实际上更喜欢它)。

我花了30分钟在谷歌上搜索,但我最终在W3规范中找到了它。

混淆是因为规范中的头文件是HTTPS: 1,这是Chromium实现它的方式,但在这个破坏了很多编码糟糕的网站之后(特别是WordPress和WooCommerce), Chromium团队道歉:

我为造成的损坏道歉;显然,基于开发和测试期间的反馈,我低估了它的影响 - Mike West,在Chrome版本501842

他们的修复是将其重命名为Upgrade-Insecure-Requests: 1,并且规范已经更新以匹配。

不管怎样,下面是来自 W3规格(因为它出现在当时)的解释…

HTTPS HTTP请求报头字段向服务器表达客户的偏好发送一个信号,以获得一个加密并经过身份验证的响应,而它可以成功地处理upgrade-insecure-requests指令是为了使首选项尽可能无缝地提供。

...

当服务器在HTTP请求的头中遇到这种首选项时,它应该将用户重定向到被请求资源的潜在安全表示。

当服务器在HTTPS请求的头中遇到这个首选项时,如果请求的主机是hsts安全的或有条件的hsts安全,它应该在响应中包含Strict-Transport-Security头[RFC6797]。

这解释了整个事情:

HTTP CSP (Content-Security-Policy)升级-不安全请求 指令指示用户代理处理站点的所有不安全url (那些通过HTTP服务的)就好像它们已经被secure取代了一样 url(通过HTTPS提供的url)。这个指令是针对web的 有大量不安全的遗留url的网站 重写。< / p >

upgrade-insecure-requests指令在之前被求值 Block-all-mixed-content,如果设置了,后者实际上是一个 无操作。建议设置一个或另一个指令,但不是这样 两者。< / p >

upgrade-insecure-requests指令不会确保用户 通过第三方网站的链接访问您的网站将升级为 HTTPS为顶级导航,因此不会取代 严格传输安全(HSTS)报头,仍然应该设置 用适当的max-age来保证用户不受影响

. SSL剥离攻击

来源:https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/upgrade-insecure-requests