Answers:
该host
头告诉该网站服务器虚拟主机使用(如果设置)。您甚至可以使用多个别名(=域和通配符域)来拥有相同的虚拟主机。在这种情况下,如果您要根据所处理的不同域提供不同的行为,仍然可以在Web应用程序中手动读取该标头。这是可能的,因为在您的Web服务器中,您可以(如果我没有记错,您必须)将一个虚拟主机设置为默认主机。只要host
标头与任何已配置的虚拟主机都不匹配,就会使用此默认虚拟主机。
这意味着:没错,尽管说“多个主机”可能有点误导性:主机(被寻址的机器)是相同的,真正解析为IP地址的是不同的域名(包括子域),这些域名也被引用用作主机名(而不是主机!)。
尽管不是问题的一部分,但还是一个有趣的事实:该规范在早期导致SSL问题,因为Web服务器必须交付与客户端已解决的域相对应的证书。但是,为了知道要使用的证书,Web服务器应该事先知道所寻址的主机名。但是由于客户端仅通过加密通道发送该信息(这意味着:证书已发送之后),因此服务器必须假定您浏览了默认主机。这意味着每个IP地址/端口组合一个ssl保护的域。
服务器名称指示已解决了这一问题;但是,这再次破坏了一些隐私,因为服务器名称现在又以纯文本格式传输,因此每个中间人都可以看到您要连接的主机名。
尽管Web服务器可以从服务器名称指示中获知主机名,但是host
标头并不会过时,因为服务器名称指示信息仅在TLS握手中使用。对于不安全的连接,根本没有服务器名称指示,因此host
标头仍然有效(并且是必需的)。
另一个有趣的事实:如果没有完全包含一个host
标头,则大多数Web服务器(如果不是全部)都会拒绝您的http请求,即使可以将其省略,因为仅配置了默认的虚拟主机。这意味着http-(get-)请求中的最低要求信息是包含METHOD
RESOURCE
和PROTOCOL VERSION
且至少包含host
-header 的第一行,如下所示:
GET /someresource.html HTTP/1.1
Host: www.example.com
在Host-Header的MDN文档中,它们实际上是这样表达的:
必须在所有HTTP / 1.1请求消息中发送主机标头字段。400(错误请求)状态码将发送到任何缺少主机头字段或包含多个主机头字段的HTTP / 1.1请求消息。
如Darrel Miller所述,完整的规范可以在RFC7230中找到。
by the book
配置不正确(完全)?
default
通过搜索找到的词附近,Otherwise, the authority component is assigned the default name configured for the server
virtual host
我在tools.ietf.org/html/rfc7230中的搜索发现的所有3个事件都在中Appendix A. HTTP Version History
。看起来您的搜索找到了其他内容。
在尝试了解HTTP标头的含义和目的时,我始终建议您访问权威性资料。
请求中的“主机”标头字段提供了
来自目标URI 的主机和端口信息,从而使源服务器能够
区分资源,同时为
单个IP地址上的多个主机名的请求提供服务。
vhost
仅3个接近的出现,virtual host
其含义与您的短语不相符,而12个default
主要涉及端口,