HTTP服务器的HTTP版本是1.0还是1.1?如何使用HTTP协议定义?

时间:2013-10-24 04:08:53

标签: http get http-headers protocols

我有一个简单的问题,但事先我已经阅读了RFC 2616第14.22章关于主机和HTTP标头,但我仍然不明白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 

1 个答案:

答案 0 :(得分: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错误。