重定向到页面并发送自定义 HTTP 标头

新手上路,请多包涵

我使用以下代码重定向到 PHP 中的页面。我需要设置自定义 HTTP 标头以与重定向一起传递。

 header("Location: http://...");

我该如何存档?

原文由 Lennie 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 580
2 个回答

这个问题需要以不同的方式回答,因为根据您正在寻找的答案是不同的:

重定向响应 (PHP)

就您关心的重定向响应(而不是重定向响应可能触发的请求)而言

多个 header 文档 调用:

 header("Location: ....");
header("Header2: ....");
header("Header3: ....");
...

由重定向响应触发的新请求(浏览器、HTTP 客户端)

如果您正在寻找由重定向响应触发的新请求,请查阅您的 HTTP 客户端技术文档以了解您的选择。

通常,HTTP 客户端不提供任何此类选项,即大多数 HTTP 客户端不会将响应标头转换为请求标头,以防其中一个响应标头是 Location: 标头和 3xx 范围内的状态代码。

无论如何,这没有任何意义,因为这种做法是不安全的。

特别是在交互式 HTTP 客户端(如浏览器)级别上,无需用户批准即可自动执行重定向。参见 HTTP ,比较 Fetch API


进一步阅读: https ://ec.haxx.se/http/http-redirects

原文由 hakre 发布,翻译遵循 CC BY-SA 4.0 许可协议

恐怕,所有的答案都是错误的和误导性的!

无论您使用何种语言或框架,都不可能重定向到设置了自定义标头的页面。换句话说,无法触发 HTTP 重定向并导致客户端(浏览器)添加自定义标头。

您可能认为使用多个 header() 调用应该可以正常工作。但它不会。您正在为指示浏览器重定向的响应设置自定义标头,而不是为重定向本身设置自定义标头。

站点指示浏览器发出带有自定义标头的 HTTP 请求的唯一方法是使用 Javascript 和 XMLHttpRequest 对象。并且它需要在目标服务器上实现 CORS 以允许此类 ajax 请求。

请注意,页面无法设置 HTTP 请求标头,除非它使用 XMLHttpRequest 发出异步请求。这意味着您也不能使用客户端的自定义标头进行此类重定向。

原文由 sepehr 发布,翻译遵循 CC BY-SA 4.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏