1

可能重复:
404 标头 - HTTP 1.0 或 1.1?

我有一个简单的 PHP 代码,它使用发送 404header

header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found"); 
echo $_SERVER["SERVER_PROTOCOL"];

但是当使用curlcommand 和 force 时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,这是什么原因?

4

2 回答 2

1

好问题。

你必须明白这不是 PHP 特有的,所以不要认为有错误或什么。它特定于:

  1. Web 服务器的配置
  2. 客户端(想想浏览器)的配置

通常,客户端在向 Web 服务器发送请求时,会指明它们支持的协议。然后,Web 服务器使用它支持或配置的协议进行响应。

在您的 PHP 代码中,当您刷新该 404 标头时,您是在暗示服务器要使用哪个协议。你不能强迫它 - 至少我不知道有一种方法可以从 PHP 中强制它。Web 服务器最终将满足其自身和请求客户端支持的最高协议。

除非客户端强制,否则 nginx 将始终通过 HTTP/1.1 响应。例如,我不知道像 Apache 这样的配置方法。但这就是您所看到的行为的原因。

也许您应该编辑您的问题,或者打开一个新问题,以更具体地针对 nginx,因为就像我解释的那样,这不是 PHP 的问题。这样更多的人可能能够找到问题并提供帮助。

于 2012-10-27T09:41:20.233 回答
-1

如果你在 nginx 和 PHP 之间使用 FastCGI(你可能是),你应该使用

header("Status: 404 Not Found");

正如PHP 的header.

于 2012-10-27T09:41:05.853 回答