HTTP响应头为何存在多个Location字段?主流浏览器如何处理?
关于HTTP响应中多个Location头的疑问解答
为什么会出现多个Location字段?
首先得明确:HTTP标准(RFC 7231)里其实规定Location头应该是单个值,用于指定重定向的目标地址。但实际场景中出现多个Location头,通常是这几种原因:
- 服务器配置错误:比如管理员在配置重定向规则时不小心添加了多条重复或冲突的规则;
- 中间件叠加:比如CDN、反向代理等服务在处理请求时,各自添加了
Location头,导致最终响应里出现多个; - 兼容性考量:有些服务器可能会同时返回HTTP和HTTPS版本的地址,试图兼容不同客户端,但这种做法并不符合标准规范。
你测试的dx.doi.org案例就是典型的同时返回HTTP和HTTPS地址的情况,可能是服务端为了兼顾旧客户端和安全需求,但这种非标准的响应可能会带来额外的跳转步骤。
主流浏览器会选哪一个重定向?
针对Chrome、Firefox、Safari这些现代浏览器,实际的处理逻辑是统一选择第一个出现的Location头,后面的会被直接忽略。
这个行为虽然没有被HTTP标准强制规定,但几乎所有主流浏览器都遵循“按顺序解析,取第一个有效Location”的逻辑。比如你测试中得到的两个地址,Chrome访问时会先跳转到http://www.nature.com/articles/ncb2867,然后这个地址大概率会再返回一个重定向到HTTPS的响应,完成最终跳转。
不过要注意:如果第一个Location地址无效(比如返回404),浏览器不会自动尝试后面的Location,直接终止重定向流程。
你的测试命令及结果
$ wget -U 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36' -q -O /dev/null -S -o- --max-redirect 1 http://dx.doi.org/10.1038/ncb2867 | grep '^ Location: ' Location: http://www.nature.com/articles/ncb2867 Location: https://www.nature.com/articles/ncb2867
总结
- 多个
Location头属于非标准响应,建议服务器端尽量只返回一个合规的Location(优先推荐HTTPS地址); - Chrome、Firefox、Safari等主流浏览器都会优先选择第一个
Location进行重定向,不会尝试后续的地址; - 这种多
Location的情况可能会导致额外的HTTP跳转,影响加载效率,服务端应该尽量避免。
内容的提问来源于stack exchange,提问作者user1424739
相关产品推荐
相关产品推荐

