
[英]404 invalid http status code when using slim framework via Angular JS $http.post
[英]Slim framework does not send http headers when http status is not 200
我正在使用 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);
报告的问题不是由超薄框架引起的。 我们的托管服务提供商使用 apache 作为网络服务器。 Apache 导致了这种行为。
有关更多详细信息,请参阅https://bz.apache.org/bugzilla/show_bug.cgi?id=61820 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.