【发布时间】:2011-10-09 19:12:03
【问题描述】:
简短的问题:我可以依赖header('.', TRUE, 404);、header('.', TRUE, 501); 等的行为吗?
现在,让我详细说明。
在问我的问题之前,我将介绍header()调用的一些用法以及它生成的相应HTTP响应代码。
header('HTTP/1.1 404 Bummer!'); -- HTTP/1.1 404 Bummer!
header('HTTP/1.1 501 I am sick'); -- HTTP/1.1 501 I am sick
header('Bummer!', TRUE, 404); -- HTTP/1.1 404 Not Found
header('I am sick', TRUE, 501); -- HTTP/1.1 501 Method Not Implemented
因此,我们可以看到,如果我们使用第三个参数而第一个参数是垃圾,则忽略第一个参数。但是,http://php.net/manual/en/function.header.php 的文档说:
注意这个参数只有在字符串不是的时候才有效果 空。
所以,我们仍然需要在第一个参数中添加一些内容。这对我来说有点难看,因为当我们在第三个参数中指定 $http_response_code 时,$string 被忽略了,但我们仍然需要为 $string 设置一些值,即使它永远不会被使用。
但我可以理解为什么会这样。传统上,header() 只接受参数,我们可以像前两个示例一样设置任意响应代码。第二个和第三个参数是后来作为可选参数添加的。所以,如果我们想使用第二个和第三个参数,我们必须为第一个参数指定一些东西。此外,有时我们可能需要在第一个参数中放入有效的标头,在第三个参数中放入有效的响应代码。我在最后附上了一个这样的例子。
因此,我计划在我的代码中以这种方式使用此函数:header('.', TRUE, 404);、header('.', TRUE, 501); 等。根据上面的示例,它将按照标准生成正确的 HTTP 响应。我想知道我是否可以依赖这种行为。我问这个问题是因为我找不到明确提到当我们提供第三个参数 ($http_response_code) 时将忽略第一个参数 ($string) 的文档。
顺便说一句,我知道第一个参数在这种情况下很有用。
header('Foo: Bar', TRUE, 501); 导致:
HTTP/1.1 501 Method Not Implemented
Date: Sun, 09 Oct 2011 19:01:19 GMT
Server: Apache/2.2.20 (Debian)
X-Powered-By: PHP/5.3.8-1
Foo: Bar
Vary: Accept-Encoding
Connection: close
Content-Type: text/html
一个更实际的例子是header('Location: @987654322@', TRUE, 307);,它会生成:
HTTP/1.1 307 Temporary Redirect
Date: Sun, 09 Oct 2011 19:09:29 GMT
Server: Apache/2.2.20 (Debian)
X-Powered-By: PHP/5.3.8-1
Location: http://example.com/there/
Vary: Accept-Encoding
Content-Type: text/html
不管怎样,回到我的问题。我可以依赖header('.', TRUE, 404);、header('.', TRUE, 501);等的行为吗?
【问题讨论】:
-
您的问题中缺少该示例。
标签: php http httpresponse http-response-codes