2

HTTP/1.0 和 HTTP/1.1 之间的主要区别在于 HTTP/1.1 中有一个强制性的 Host标头(来源:HTTP Pocket Reference - O'reilly)。

那么,为什么那个使用 HTTP/1.0 协议的 Wget 里面有一个主机头呢?

我使用netcat的 Wget 输出:

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协议版本,怎么会有host头呢?还是我对 HTTP 协议的理解有问题?

即使 HTTP/1.0 可以在其 HTTP 请求中包含 Host Header,wget 使用 HTTP/1.0 协议而 HTTP/1.1 也可以代替它的原因是什么?

4

2 回答 2

1

在 HTTP/1.0 中,Host标头是可选的。不同之处在于 HTTP/1.1 将其从optional更改为强制

特别是,如果该GET行不包含主机名(如您的示例中),则需要将其包含在标头中(因为否则,如果服务器无法确定您的请求是针对哪个主机的,则“虚拟”域是不可能的)。

于 2010-10-27T10:57:18.727 回答
1

Host 标头作为 HTTP/1.0 的“可选”附加项很早就被添加到 HTTP/1.0 中,当时人们意识到这是允许一台服务器为多个域提供页面的唯一方法。wget 使用带有 Host 的 HTTP/1.0 作为与最大数量的站点兼容的方式,其中一些站点即使需要 Host 也不会响应 HTTP/1.1。

于 2010-10-27T10:57:29.873 回答