设置响应状态代码

Rob*_*son 91 php cakephp http-status-codes cakephp-1.3

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

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

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

  if( !$this->auth_api() ) {
    header( '401 Not Authorized' );
    exit( 'Not authorized' );
  }
Run Code Online (Sandbox Code Playgroud)

Bra*_*rad 131

PHP <= 5.3

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

header('HTTP/1.1 401 Unauthorized', true, 401);
Run Code Online (Sandbox Code Playgroud)

PHP> = 5.4

请参阅Gajus的回答:https://stackoverflow.com/a/14223222/362536

  • 你应该使用`HTTP/1.1`.现在,从PHP 5.4开始,您可以使用`http_response_code()`来设置代码.那是最好的方法.否则,您必须将其附加到某个标题.你总是可以做一些像`header('X-Ignore-This:something',true,401)` (5认同)

Gaj*_*jus 116

从PHP 5.4开始,您可以使用http_response_code.

http_response_code(404);
Run Code Online (Sandbox Code Playgroud)

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

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

  1. 升级.
  2. 使用PHP中实现的http_response_code功能.

  • +提供最新答案,因为该问题是最重要的结果之一。 (3认同)

Wes*_*rch 12

我不认为你正确设置标题,试试这个:

header('HTTP/1.0 401 Unauthorized');
Run Code Online (Sandbox Code Playgroud)


nah*_*hri 11

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

$this->response->statusCode(200);
Run Code Online (Sandbox Code Playgroud)

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


小智 5

我对 CakePHP 2.0.1 也有同样的问题

我尝试使用

header( 'HTTP/1.1 400 BAD REQUEST' );
Run Code Online (Sandbox Code Playgroud)

$this->header( 'HTTP/1.1 400 BAD REQUEST' );
Run Code Online (Sandbox Code Playgroud)

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

我最终确实通过使用解决了这个问题

$this->header( 'HTTP/1.1 400: BAD REQUEST' );
Run Code Online (Sandbox Code Playgroud)

之后,php / CakePHP 不再出现错误或警告。

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