通过阅读关于Stack Overflow的php规范和其他问题,我可以看到三种从PHP发送HTTP响应代码的方法:
header("HTTP/1.0 404 Not Found");
^ ^ ^
A B C
header(" ", false, 404);
^ ^ ^
C D B
http_response_code(404);
^
B
A: Defines HTTP header
B: Response code
C: Message
D: To replace previous header or not
这些和最好使用哪一个有什么区别?我对参数的理解是否正确?
谢谢,
Tugzrida。
答案 0 :(得分:3)
要回答关于有什么区别的问题,我在PHP文档中找到了this comment(感谢Steven):
http_response_code
基本上是编写http的简写方式 状态标题,增加了奖金,PHP将合适 通过将您的响应代码与其中一个匹配来提供的原因短语 它所维护的枚举中的值 PHP-SRC /主/ http_status_codes.h。请注意,这意味着您的回复 代码必须与PHP知道的响应代码相匹配。你无法创造 你自己的响应代码使用这种方法,但你可以使用 标题方法。总结 -
http_response_code
和header
之间的差异 用于设置响应代码:
使用
http_response_code
将导致PHP匹配并从硬编码的原因短语列表中应用原因短语 PHP源代码。- 醇>
由于上面的第1点,如果您使用
http_response_code
,则必须设置PHP知道的代码。您无法设置自己的自定义代码, 但是,如果您使用,则可以设置自定义代码(和原因短语) 标题方法。
我很好奇一些流行的框架如何在标准响应中发送标头:
// status
header(sprintf('HTTP/%s %s %s', $this->version, $this->statusCode, $this->statusText), true, $this->statusCode);
Zend Framework 2也设置了原始标题:
public function renderStatusLine()
{
$status = sprintf(
'HTTP/%s %d %s',
$this->getVersion(),
$this->getStatusCode(),
$this->getReasonPhrase()
);
return trim($status);
}
也是如此
protected function sendHeaders()
{
if (headers_sent()) {
return;
}
$statusCode = $this->getStatusCode();
header("HTTP/{$this->version} $statusCode {$this->statusText}");
// ...