我正在使用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