我使用以下代码重定向到 PHP 中的页面。我需要设置自定义 HTTP 标头以与重定向一起传递。
header("Location: http://...");
我该如何存档?
原文由 Lennie 发布,翻译遵循 CC BY-SA 4.0 许可协议
恐怕,所有的答案都是错误的和误导性的!
无论您使用何种语言或框架,都不可能重定向到设置了自定义标头的页面。换句话说,无法触发 HTTP 重定向并导致客户端(浏览器)添加自定义标头。
您可能认为使用多个 header()
调用应该可以正常工作。但它不会。您正在为指示浏览器重定向的响应设置自定义标头,而不是为重定向本身设置自定义标头。
站点指示浏览器发出带有自定义标头的 HTTP 请求的唯一方法是使用 Javascript 和 XMLHttpRequest
对象。并且它需要在目标服务器上实现 CORS 以允许此类 ajax 请求。
请注意,页面无法设置 HTTP 请求标头,除非它使用 XMLHttpRequest
发出异步请求。这意味着您也不能使用客户端的自定义标头进行此类重定向。
原文由 sepehr 发布,翻译遵循 CC BY-SA 4.0 许可协议
2 回答2.6k 阅读✓ 已解决
2 回答3.1k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
1 回答1k 阅读✓ 已解决
1 回答1.3k 阅读✓ 已解决
3 回答1.2k 阅读
2 回答1.2k 阅读
这个问题需要以不同的方式回答,因为根据您正在寻找的答案是不同的:
重定向响应 (PHP)
就您关心的重定向响应(而不是重定向响应可能触发的请求)而言
多个
header
文档 调用:由重定向响应触发的新请求(浏览器、HTTP 客户端)
如果您正在寻找由重定向响应触发的新请求,请查阅您的 HTTP 客户端技术文档以了解您的选择。
通常,HTTP 客户端不提供任何此类选项,即大多数 HTTP 客户端不会将响应标头转换为请求标头,以防其中一个响应标头是
Location:
标头和 3xx 范围内的状态代码。无论如何,这没有任何意义,因为这种做法是不安全的。
特别是在交互式 HTTP 客户端(如浏览器)级别上,无需用户批准即可自动执行重定向。参见 HTTP ,比较 Fetch API 。
进一步阅读: https ://ec.haxx.se/http/http-redirects