重定向到页面并发送自定义 HTTP 标头
Posted
技术标签:
【中文标题】重定向到页面并发送自定义 HTTP 标头【英文标题】:Redirect to page and send custom HTTP headers 【发布时间】:2011-11-26 20:40:59 【问题描述】:我使用以下代码重定向到 php 中的页面。我需要设置一个自定义 HTTP 标头以与重定向一起传递。
header("Location: http://...");
我该如何存档?
【问题讨论】:
多个header
调用。
我尝试在重定向前后添加它,然后我在 Firefox 上使用 HttpFox,但发现 HTTP 标头没有被发送。
您是否尝试通过重定向发送数据?为什么不使用 php 会话?
【参考方案1】:
恐怕所有的答案都是错误和误导的!
无论您使用什么语言或框架,都无法重定向到设置了自定义标题的页面。换句话说,没有办法触发 HTTP 重定向并导致客户端(浏览器)添加自定义标头。
您可能认为使用多个header()
调用应该可以正常工作。但它不会。您正在为指示浏览器重定向的响应设置自定义标头,而不是为重定向本身。
网站指示浏览器发出带有自定义标头的 HTTP 请求的唯一方法是使用 javascript 和 XMLHttpRequest
对象。并且它需要在目标服务器上实现 CORS 以允许此类 ajax 请求。
请注意,页面不能设置 HTTP 请求标头,除非它使用 XMLHttpRequest
发出异步请求。这意味着您也不能在客户端使用自定义标头进行此类重定向。
【讨论】:
【参考方案2】:只需在此之后或之前添加额外的header()
调用。
header("Location: http://...");
header("Content-Type: text/plain");
【讨论】:
header("Location: http://...");
将在第二行运行之前重定向。
不可能
@genesis 不见了?在哪里??一切都好吗?【参考方案3】:
这个问题需要以不同的方式回答,因为取决于你在哪里寻找答案是不同的:
重定向响应 (PHP)
就您所关心的重定向响应(而不是可能由重定向响应触发的请求)而言
多个header
Docs 调用:
header("Location: ....");
header("Header2: ....");
header("Header3: ....");
...
由重定向响应(浏览器、HTTP 客户端)触发的新请求
如果您正在寻找由重定向响应触发的新请求,请查阅您的 HTTP 客户端技术文档以了解您的选择。
通常 HTTP 客户端不提供任何此类选项,大多数 HTTP 客户端不会将响应标头转换为请求标头,以防响应标头之一是 Location:
标头。
这无论如何都没有任何意义,因为这样的做法是不安全的。
尤其是在交互式 HTTP 客户端(如浏览器)级别上,无需用户批准即可自动执行重定向。
延伸阅读:https://ec.haxx.se/http/http-redirects
【讨论】:
什么对你不起作用?请发布您的代码。我猜不出你做错了什么。 header("VIA: maga"); header("X_MSISDN: +27000000000"); header("X_UP_CALLING_LINE_ID: +27000000000"); header("位置:url"); 您需要在 Firefox 中禁用自动重定向才能实际查看发送了哪些响应标头。如果您不这样做,Firefox 将对Location
标头中给出的 URI 进行第二次请求,这是另一回事。您可以通过注释掉 Location
标头来暂时禁用自动重定向,或者您可以通过安装一个小插件来禁用它:NoRedirect 1.2.4 Toolpress Strict Edition (Firefox Add-On)
它不起作用,因为您无法为重定向设置自定义 HTTP 标头。从来没有!
@hakre:我不知道我当时说了什么以及这些事情是如何运作的 ? 但我相信你说得有道理。以上是关于重定向到页面并发送自定义 HTTP 标头的主要内容,如果未能解决你的问题,请参考以下文章
使用自定义标头重定向到外部站点 - AngularJS/OAuth
Tomcat 未重定向到 400 bad request 自定义错误页面