2013-10-24 27 views
0

我有一个简单的问题,但事先我已阅读关于主机和HTTP标头的RFC 2616第14.22章,但我仍然不明白httpd.conf或web服务器的配置文件应该更改哪里?如果我错了,请纠正我。Web服务器定义的HTTP版本是1.0还是1.1? HTTP协议定义如何工作?

看看下面的两个HTTP GET,我做了一个Apache。第一个是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 
+0

你可以发布你的GET请求吗?如果有的话,HTTP/1.1应该更好地工作,因为它理解更多的头文件和方法类型。 – tjameson

回答

0

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

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

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

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

相关问题