Slim框架在http状态不是200时不发送http报头



我正在使用PHP Slim框架v4。我尝试发送一个HTTP报头和一个HTTP错误代码。HTTP状态为200时,它工作正常。当指定304时,响应错误码很好,但在这种情况下缺少标头。

return $response->withHeader('Content-Type', 'text/plain')
->withHeader('X-Error-Message', $message)
->withHeader("Access-Control-Allow-Origin", $_SERVER['HTTP_ORIGIN'])
->withStatus(200);

这可以工作,但是下面的代码不会提交头文件

return $response->withHeader('Content-Type', 'text/plain')
->withHeader('X-Error-Message', $message)
->withHeader("Access-Control-Allow-Origin", $_SERVER['HTTP_ORIGIN'])
->withStatus(304);

知道为什么这不起作用吗?

如您所见,我需要一个CORS标头来避免浏览器抛出错误。

我猜你会看到PHP内部警告:

Warning: Undefined array key "HTTP_ORIGIN" 

此警告将在Slim$response被处理之前由PHP发送。

请注意,HTTP_ORIGIN标头并不总是存在,并且依赖此键不是好的做法。相反,最好检查域名并在有效时发送*

这个阻止这个警告试试这个:

$httpOrigin = $request->getServerParams()['HTTP_ORIGIN'] ?? '';
if($httpOrigin) {
$response = $response->withHeader('Access-Control-Allow-Origin', $httpOrigin);
}
return  $response->withHeader('Content-Type', 'text/plain')
->withHeader('X-Error-Message', $message)
->withStatus(403);

报告的问题不是由slim框架引起的。我们的主机提供商使用apache作为web服务器。

详情见https://bz.apache.org/bugzilla/show_bug.cgi?id=61820

相关内容

  • 没有找到相关文章

最新更新