我向HTTP(非HTTPS)网站发出了POST请求,检查了Chrome开发者工具中的请求,发现它在将其发送到服务器之前添加了自己的标头:
Upgrade-Insecure-Requests: 1
Run Code Online (Sandbox Code Playgroud)
在搜索之后Upgrade-Insecure-Requests,我只能找到有关发送此标头的服务器的信息:
Content-Security-Policy: upgrade-insecure-requests
Run Code Online (Sandbox Code Playgroud)
这似乎是相关的,但仍然非常不同,因为在我的情况下,CLIENT在请求中发送标头,而我发现的所有信息都与SERVER在响应中发送相关标头有关.
那么为什么Chrome(44.0.2403.130米)会添加Upgrade-Insecure-Requests我的请求以及它的作用是什么?
此标题已被添加为W3C候选推荐标准,现已正式认可.
对于那些刚刚遇到这个问题并且感到困惑的人来说,Simon East 的出色答案很好地解释了这一点.
该Upgrade-Insecure-Requests: 1头曾经是HTTPS: 1 在之前的W3C工作草案,并改名悄然由镀铬前的变化成为正式受理.
(在此过渡期间,当此标题上没有官方文档且Chrome是唯一发送此标题的浏览器时,会询问此问题.)
我试图强制所有http请求到https请求,我正面临问题,因为弹性负载均衡器没有在请求中填充x-forwarded-proto标头.
这是我正在使用的代码,因此导致重定向循环.我该如何解决这个问题?
app.use (function (req, res, next) {
console.log('Request headers = ' + JSON.stringify(req.headers));
console.log('Request protocol = ' + JSON.stringify(req.protocol));
var schema = (req.headers['x-forwarded-proto'] || '').toLowerCase();
if (schema === 'https') {
next();
} else {
res.redirect('https://' + req.headers.host + req.url);
}
});
Run Code Online (Sandbox Code Playgroud) load-balancing amazon-ec2 amazon-web-services node.js express