我有一个使用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标头?