使用PHP发送正确的HTTP 404头
可能重复:使用PHP发送正确的HTTP 404头,php,http,Php,Http,可能重复: 我有一个简单的PHP代码,它使用头发送404 header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found"); echo $_SERVER["SERVER_PROTOCOL"]; 但是当使用curl命令并强制1.0时,它会返回 curl -0 -v 'http://www.example.com/test.php' > GET /test.php HTTP/1.0 < HTTP/1.1 404 Not Found &l
我有一个简单的PHP代码,它使用
头发送404
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found");
echo $_SERVER["SERVER_PROTOCOL"];
但是当使用curl
命令并强制1.0
时,它会返回
curl -0 -v 'http://www.example.com/test.php'
> GET /test.php HTTP/1.0
< HTTP/1.1 404 Not Found
< Server: nginx
< Date: Sat, 27 Oct 2012 08:51:27 GMT
< Content-Type: text/html
< Connection: close
<
* Closing connection #0
HTTP/1.0
curl-0-v'http://www.example.com/test.php'
>GET/test.php HTTP/1.0
未找到
正如您所看到的,$\u SERVER[“SERVER\u PROTOCOL”]
是1.0,但是header给我1.1
,原因是什么?如果您在nginx和PHP之间使用FastCGI(您可能是),那么您应该改为使用
header("Status: 404 Not Found");
根据。的建议,这是一个很好的问题
您必须理解,这不是PHP特有的东西,所以不要认为存在bug或其他东西。具体到:
web服务器的配置
客户端(想想浏览器)的配置
通常,客户端在向web服务器发送请求时,会指示它们支持哪种协议。然后,web服务器使用其支持的或配置为的协议进行响应
在PHP代码中,当刷新404头时,您向服务器暗示要使用哪个协议。你不能强制它-至少我不知道从PHP强制它的方法。web服务器最终将满足于其自身和请求客户端所支持的最高协议
除非客户端强制执行,否则nginx将始终通过HTTP/1.1进行响应。我不知道有什么方法可以像Apache那样配置它。但这就是你所看到的行为的原因
也许您应该编辑您的问题,或者打开一个新的问题,以便更具体地针对nginx,因为正如我解释的,这不是PHP的问题。这样,更多的人可以找到问题并提供帮助。@Gordon,如果你说它是重复的,请仔细阅读。是的,我已经尝试过,仍然使用1.1$\u服务器[“服务器协议”]
只是发送请求时使用的协议版本,而不一定是发送响应时使用的协议版本。使用该标题应适当设置404。我使用的是nginx/php5 fpm,问题是当客户告诉他们只支持1.0时,使用1.1响应仍然有意义?@Yoga是的,我刚刚意识到,从您发布的响应标题中可以清楚地看出,您使用的是nginx。很抱歉:)。无论如何,有关详细信息,请参见我的编辑。我的curl
命令已指定我只想与http 1.0
聊天,我也同意这是nginx
的问题,然后我将在serverfault中报告。谢谢