2013-10-24 26 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錯誤。

相關問題