Can';t在PHP中将响应代码设置为200

Can';t在PHP中将响应代码设置为200,php,http-headers,http-status-codes,Php,Http Headers,Http Status Codes,我试图将PHP脚本中的响应代码设置为200。后来我设置了一个Location标题,将其设置为302。根据文件: 它不仅会将此标题发送回浏览器,而且还会 将重定向(302)状态代码返回到浏览器,除非201或 已设置3xx状态代码 是否无法将收割台设置为200并且不让位置收割台覆盖它?我尝试在位置头之后设置响应代码头,但这不起作用(可能是因为位置头已经与包含“find”HTML位的正文一起发送了) 我可以使用201作为响应代码,因为访问脚本的应用程序只检查任何2xx代码。但是,根据HTTP 1.1规

我试图将PHP脚本中的响应代码设置为200。后来我设置了一个
Location
标题,将其设置为302。根据文件:

它不仅会将此标题发送回浏览器,而且还会 将重定向(302)状态代码返回到浏览器,除非201或 已设置3xx状态代码

是否无法将收割台设置为200并且不让
位置
收割台覆盖它?我尝试在位置头之后设置响应代码头,但这不起作用(可能是因为位置头已经与包含“find”HTML位的正文一起发送了)

我可以使用201作为响应代码,因为访问脚本的应用程序只检查任何2xx代码。但是,根据HTTP 1.1规范:

源服务器必须在返回201状态代码之前创建资源

但我没有创造任何东西。这是一个问题,还是我可以侥幸逃脱?

根据,带有重定向的200状态代码无效(请参阅10.3重定向3xx)。重定向时,只有3xx代码有效


如果要完成任务,您可以继续发送任意2xx代码,但这超出了标准,理论上不可能在所有用户代理中都可靠。

我找到了解决我特定问题的答案。我最初的问题是,一个地方需要
重定向
头,另一个地方需要
HTTP/1.1200 OK
头,因此我可以根据源代码使用其中一个

但是,在尝试了201选项之后,这也不起作用,(仍然是302),因此我不知道这是一个bug还是我做得不对,或者是什么。

头()中的“Location:”参数用于重定向。重定向是HTTP请求者(即用户代理)使用“位置”中给出的信息向服务器发送新请求的指令

因此,在任何时候将状态代码设置为200都是错误的,必须忽略;默认为302


如果你不想重定向,那就不要设置位置

如果你重定向,为什么是200?这有点令人困惑,但同一个脚本从两个地方调用,一个需要200响应代码,另一个需要位置。。。虽然我可能会让其中一个地方发送一些其他参数来确定是否应该发送Location:header。哎哟,回答了我自己的问题。更不用说搜索引擎可能会将页面标记为无效并停止索引。我们根本不担心这是一个可搜索的页面。但是在使用CGI时它是有效的,因为它会指示web服务器进行内部重定向。先生,我在回答中详细说明了它不起作用的原因:它不应该起作用,因为状态200与
位置
重定向一起无效。它与标准相反,所以它不起作用是好的:)但是为什么201不起作用,这是有记录的,它应该能正常工作,但没有?201(正如您在OP中所讨论的)是另一种情况。php文档甚至提到了这段代码()-201,这意味着您的请求已成功处理,并意味着根据您的请求创建了一个新的URI。URI可以与状态一起传递,但它不被认为是用户代理的“行动调用”——代理不应该访问给定的URI。相反,3xx代码是对用户代理的显式指令。我不需要用户代理实际执行任何操作,我只需要使用响应代码201,但在任何情况下,使用Location:header都会导致302响应显示,即使我在头之前、之后甚至在头期间显式将其设置为201(“Location:…”)Call您的PHP版本是什么?这是过去版本(4.3.3-RC3)中的一个错误,但已更正。我刚刚制作了一个测试文档,如果我这样做,它将完全按照预期工作:
header('HTTP/1.1 201 Created');header('Location:http://www.php.net/")
-我得到一个空白文档,其标题为创建的
201
,位置为
http://www.php.net/