2010-10-27 80 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行不包含主机名(例如你的例子),你需要将它包含在头文件中(否则,如果服务器无法确定哪个“虚拟”域是可能的主持你的请求是)。