0

我有一个简单的问题,但我事先已经阅读了关于主机和 HTTP 标头的 RFC 2616 第 14.22 章,但我仍然不明白 httpd.conf 或网络服务器的配置文件应该在哪里更改?如果我错了,请纠正我。

看看我对 Apache 执行的以下两个 HTTP GET。第一个是 HTTP 1.0 的 GET,另一个是 HTTP 1.1 的 GET。查看输出:

HTTP/1.0 200 OK
Date: Thu, 24 Oct 2013 03:46:22 GMT
Server: Apache/1.3.41 (Unix) mod_gzip/1.3.26.1a PHP/5.2.9 mod_throttle/3.1.2                 mod_psoft_traffic/0.2 mod_ssl/2.8.31 OpenSSL/0.9.8b
Vary: *
Last-Modified: Fri, 10 Aug 2012 20:22:30 GMT
ETag: "17c815b-3b-50256d86"
Accept-Ranges: bytes
Content-Length: 59
Connection: close
Content-Type: text/html

<html>
<body>
<center>webli7</center>
</body>
</html>

HTTP/1.1 400 Bad Request
Date: Thu, 24 Oct 2013 04:04:40 GMT
Server: Apache/1.3.41 (Unix) mod_gzip/1.3.26.1a PHP/5.2.9 mod_throttle/3.1.2 mod_psoft_traffic/0.2 mod_ssl/2.8.31 OpenSSL/0.9.8b
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html; charset=iso-8859-1

16e 
4

1 回答 1

0

HTTP 协议版本是动态决定的,而不是通过配置文件。客户端发送一个请求,指定其支持的最高协议版本。然后,服务器必须响应客户端请求的版本,或者它喜欢的任何早期版本。

由于 Apache 确实支持 HTTP/1.1,因此它应该与客户端提供的版本完全匹配。

您可以在 Apache 的配置中设置一个标志,以强制 Apache 在某些情况下使用 HTTP/1.0,即使浏览器请求 HTTP/1.1。这用于修复一些非常旧的浏览器的 HTTP/1.1 处理中的错误。今天,你应该不需要玩这个标志。

至于您的错误,我建议您确保您的 GET 确实提供了 Host: 标头。该标头在 HTTP/1.1 中是必需的,但在 HTTP/1.0 中是可选的,缺少它肯定会导致 400 错误。

于 2013-10-24T04:40:18.657 回答