设置响应状态代码

时间:2011-05-28 19:44:39

标签: php cakephp cakephp-1.3 http-status-codes

我有一个API调用,我需要能够运行一些检查并可能返回各种状态代码。我不需要自定义视图或任何东西,我只需要返回正确的代码。如果用户未通过正确的凭据,我需要返回401状态。如果他们没有发送支持的请求格式,我需要返回400状态。

因为它是一个API,所以我真正想做的就是设置响应状态并退出一条简单的愚蠢消息,说明请求失败的原因(可能使用exit)。足以完成工作,但我无法使其正常工作。我已经尝试过使用PHP的header()和Cake的$this->header()(这都在控制器中),但是虽然我收到退出消息,但标题显示200 OK状态。

使用下面的代码,我收到消息,但未设置标头。我错过了什么?

  if( !$this->auth_api() ) {
    header( '401 Not Authorized' );
    exit( 'Not authorized' );
  }

6 个答案:

答案 0 :(得分:128)

PHP< = 5.3

header()函数有一个状态代码参数。如果您指定它,服务器将从那里处理它。

header('HTTP/1.1 401 Unauthorized', true, 401);

PHP> = 5.4

见Gajus的回答:https://stackoverflow.com/a/14223222/362536

答案 1 :(得分:113)

自PHP 5.4起,您可以使用http_response_code

http_response_code(404);

这将负责设置正确的HTTP标头。

如果您正在运行PHP< 5.4那么你有两个选择:

  1. 升级。
  2. 使用PHP中实现的this http_response_code function

答案 2 :(得分:11)

我认为你没有正确设置header,试试这个:

header('HTTP/1.0 401 Unauthorized');

答案 3 :(得分:11)

为什么不使用Cakes Response Class? 您可以通过以下方式设置响应的状态代码:

$this->response->statusCode(200);

然后只使用错误消息呈现一个文件,该文件最适合JSON。

答案 4 :(得分:4)

我在CakePHP 2.0.1中遇到了同样的问题

我尝试使用

header( 'HTTP/1.1 400 BAD REQUEST' );

$this->header( 'HTTP/1.1 400 BAD REQUEST' );

然而,这些都没有解决我的问题。

我最终使用

解决了这个问题
$this->header( 'HTTP/1.1 400: BAD REQUEST' );

之后,php / CakePHP没有错误或警告。

* edit:在上一次$this->header函数调用中,我在400和错误的描述文本之间放了一个冒号(:)。

答案 5 :(得分:0)

如前所述,但对于像我这样的初学者,请不要忘记包括回报。

$this->response->statusCode(200);
return $this->response;