2010-10-27 79 views
2

HTTP/1.0和HTTP/1.1之間的主要區別在於HTTP/1.1有一個強制性的主機在它的頭(來源:HTTP袖珍參考 - 奧雷利)。爲什麼Wget在HTTP請求中有主機頭?

那麼,爲什麼那個使用HTTP/1.0協議的Wget有一個主機頭呢?

我的Wget的輸出與netcat

GET/HTTP/1.0 
User-Agent: Wget/1.12 (linux-gnu) 
Accept: */* 
Host: 127.0.0.1:10101 
Connection: Keep-Alive 

作爲清楚的是Wget的使用HTTP/1.0協議版本,它是如何可以具有在其中的主機頭?或者我對HTTP協議的理解出現問題?

即使HTTP/1.0可以在其HTTP請求中包含主機頭文件,那麼wget使用HTTP/1.0協議背後的原因是什麼,而HTTP/1.1也可以用來代替它?

回答

1

很早之前,Host頭被添加爲HTTP/1.0中的「可選」附加元件,當時它意識到這是允許一臺服務器爲多個域提供頁面的唯一方法。 wget使用HTTP/1.0與主機協作以兼容最大數量的站點,其中一些站點即使需要主機也不會響應HTTP/1.1。

+0

但Paul,服務器將盡一切努力來符合客戶端使用的最兼容版本的HTTP。所以即使wget使用1.1服務器也會使用最兼容的一個。要麼是1.1或1.0,爲什麼它不響應請求? – 2010-10-27 11:08:16

+0

如果服務器不理解1.1,它將不會響應1.1請求。我知道現在不做1.1的服務器的數量可能很少,但是由於wget不需要任何1.1可以提供1.0的東西,爲什麼它會選擇刪除任何1.0服務器? – 2010-10-27 13:10:21

1

在HTTP/1.0中,Host標頭爲可選。區別在於HTTP/1.1將其從可選更改爲強制

特別是,如果GET行不包含主機名(例如你的例子),你需要將它包含在頭文件中(否則,如果服務器無法確定哪個「虛擬」域是可能的主持你的請求是)。