当响应状态= 401时,Slim 3不发送CORS头

时间:2016-01-14 22:23:54

标签: php ajax rest cors slim

我有一个使用Slim 3的REST API,在身份验证失败时返回HTTP 401。我进行了设置,以便OPTIONS请求始终返回200状态以通过CORS预检检查。问题是,当发送真正的GET请求时,如果HTTP状态为401,则不会发送CORS标头。

因此,Chrome会在控制台中显示此错误:

  

否'访问控制 - 允许 - 来源'标头出现在请求的资源上。起源' http://localhost'因此不允许访问。响应的HTTP状态代码为401。

我希望能够在REST API中使用HTTP 401,但是浏览器需要能够通过AJAX获得响应而不会阻止Chrome。

此代码 返回Access-Control-Allow-Origin标头:

use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;
class Authentication 
{
    public function __invoke( ServerRequestInterface $request, ResponseInterface $response, callable $next )
    {
        $response = $response->withHeader('Access-Control-Allow-Origin', '*');
        $response = $response->withStatus(204);
        return $response;
    }
}

以下是204响应返回的响应标头:

Date: Thu, 14 Jan 2016 22:25:36 GMT
Server: Apache
X-Powered-By: PHP/5.6.10 ZendServer/8.5.1
Set-Cookie: ZDEDebuggerPresent=php,phtml,php3; path=/
Access-Control-Allow-Origin: *
Content-Length: 0
Connection: close
Content-Type: 

返回Access-Control-Allow-Origin标头:

use Psr\Http\Message\ServerRequestInterface;
use Psr\Http\Message\ResponseInterface;
class Authentication 
{
    public function __invoke( ServerRequestInterface $request, ResponseInterface $response, callable $next )
    {
        $response = $response->withHeader('Access-Control-Allow-Origin', '*');
        $response = $response->withStatus(401);
        return $response;
    }
}

以下是使用401响应发送的响应标头:

Date: Thu, 14 Jan 2016 22:00:20 GMT
Server: Apache
Content-Length: 381
Connection: close
Content-Type: text/html; charset=UTF-8

如何通过401响应返回Access-Control-Allow-Origin标头?

0 个答案:

没有答案