I made a POST request to a HTTP (non-HTTPS) site, inspected the request in Chrome's Developer Tools, and found that it added its own header before sending it to the server:
Upgrade-Insecure-Requests: 1
After doing a search on Upgrade-Insecure-Requests
, I can only find information关于发送this标题的服务器的href和文字:
Content-Security-Policy: upgrade-insecure-requests
这看似相关,但仍然非常不同,因为在我的情况下,CLIENT正在请求中发送标头,而我发现的所有信息都与发送相关的SERVER有关。 响应中的标题。
那么为什么Chrome(44.0.2403.130米)会在我的请求中添加Upgrade-Insecure-Requests
以及它会做什么?
此标题已添加为W3C Candidate Recommendation,现已正式认可。
对于那些刚刚遇到这个问题并且感到困惑的人,Simon East的excellent answer解释得很清楚。
Upgrade-Insecure-Requests: 1
标题曾是HTTPS: 1
in the previous W3C Working Draft,并且在变更正式被接受之前被Chrome重命名为 悄然 。
(在此过渡期间,当此标题没有官方文档且Chrome是唯一发送此标题的浏览器时,系统会询问此问题。)
答案 0 :(得分:264)
简短回答:它与Content-Security-Policy: upgrade-insecure-requests
响应标头密切相关,表明浏览器支持它(实际上更喜欢它)。
我花了30分钟的谷歌搜索,但我终于发现它埋在W3规格中。
混乱的原因是规范中的标题是HTTPS: 1
,这就是Chromium实现它的方式,但在此broke lots of websites that were poorly coded(特别是WordPress和WooCommerce)之后,Chromium团队道歉:
“我为破损道歉;我显然低估了开发和测试期间反馈的影响。”
- Mike West,Chrome Issue 501842
他们的解决方法是将其重命名为Upgrade-Insecure-Requests: 1
,此后规范已更新为匹配。
无论如何,这是来自the W3 spec (as it appeared at the time) ...
的解释
HTTPS
HTTP请求标头字段向服务器发送信号表示客户端的首选项以获取加密且经过身份验证的响应,它可以成功处理升级不安全-requests指令,以使该首选项尽可能无缝地提供。...
当服务器在HTTP请求的标头中遇到此首选项时,它应该将用户重定向到所请求资源的潜在安全表示。
当服务器在HTTPS请求的标头中遇到此首选项时,如果请求的主机是HSTS安全的或有条件的HSTS安全[RFC6797],它应该在响应中包含
Strict-Transport-Security
标头。
答案 1 :(得分:2)
这解释了整个事情:
HTTP内容 - 安全 - 策略(CSP)升级 - 不安全请求 指令指示用户代理处理所有站点的不安全URL (通过HTTP提供的服务)好像已被安全替换 网址(通过HTTPS提供的网址)。该指令适用于Web 需要具有大量不安全遗留URL的站点 重写。
之前评估了upgrade-insecure-requests指令 block-all-mixed-content如果设置了,后者实际上是a 无操作。建议设置一个指令或另一个指令,但不是 两者。
upgrade-insecure-requests指令不能确保用户 通过第三方网站上的链接访问您的网站将升级到 用于顶级导航的HTTPS因此不会替换 严格传输安全(HSTS)标头,仍应设置 使用适当的最大年龄来确保用户不受此限制 SSL剥离攻击。