我有一个简单的PHP代码,使用header
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
正如您所看到的,$_SERVER["SERVER_PROTOCOL"]
为1.0,但标题为1.1
,原因是什么?
答案 0 :(得分:1)
很棒的问题。
你必须明白这不是PHP特有的东西,所以不要认为有bug或什么的。具体到:
通常,客户端在向Web服务器发送请求时会指出它们支持的协议。然后,Web服务器使用它支持的协议进行响应,或者将其配置为。
在您的PHP代码中,当您刷新404标头时,您暗示服务器使用哪种协议。你不能强迫它 - 至少我不知道从PHP强制它的方法。 Web服务器最终将满足自身和请求客户端支持的最高协议。
除非客户端强制执行,否则nginx将始终通过HTTP / 1.1进行响应。我不知道像Apache这样配置它的方法。但这就是你所看到的行为的原因。
也许你应该编辑你的问题,或者打开一个新的问题,以便更加特定于nginx,因为我解释过这不是PHP的问题。这样,更多的人可能能够找到问题并提供帮助。
答案 1 :(得分:-1)
如果你在nginx和PHP之间使用FastCGI(你可能是),你应该使用
header("Status: 404 Not Found");