![Web 服务器是否能够知道解析为 Web 服务器 IP 地址的主机名?](https://linux22.com/image/733648/Web%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E6%98%AF%E5%90%A6%E8%83%BD%E5%A4%9F%E7%9F%A5%E9%81%93%E8%A7%A3%E6%9E%90%E4%B8%BA%20Web%20%E6%9C%8D%E5%8A%A1%E5%99%A8%20IP%20%E5%9C%B0%E5%9D%80%E7%9A%84%E4%B8%BB%E6%9C%BA%E5%90%8D%EF%BC%9F.png)
对于 Web 服务器,基于名称的虚拟主机使用服务器收到的 HTTP 请求中的 Host 标头中指定的主机名。
Web 服务器是否能够知道解析为 Web 服务器 IP 地址的主机名?
如果是,那么是否意味着 Web 服务器也可以使用已解析为 Web 服务器 IP 地址的主机名进行虚拟托管?
Web 服务器如何知道已解析为 Web 服务器 IP 地址的主机名?
谢谢。
答案1
Web 服务器不关心客户端如何找到它们,它们只关心 HTTP 请求中包含什么主机名(如果有)。
HTTP 协议提供了一些方法(称为“主机头”)来向 Web 服务器询问“给我一个网站www.host1.com
”或“现在给我一个网站www.host2.com
”,而 Web 服务器则使用这些信息来选择用哪些 Web 内容来回答,而不管实际的网络连接是如何建立的。
请注意,HTTP 主机头和 DNS 之间根本没有任何关系;通常客户端(比如 Web 浏览器)会向 DNS 询问哪个 IP 地址对应于www.host1.com
,然后它会连接到该 IP 地址,接着它会发出 HTTP 请求,向 Web 服务器询问www.host1.com
;但这两件事并没有直接的关系,而且可以有几种不同的情况,比如客户端可以制作自定义 HTTP 请求,或者由客户端的本地文件执行主机名到 IP 的映射hosts
,甚至可以代表其他人发出请求并在传输过程中对其进行调整的代理(或反向代理)。
举个例子:今天我正在测试一个需要使用特定主机名进行调用的网站;为了从我的网络浏览器对其进行测试,我必须将其 IP 地址映射到我计算机文件中的主机名hosts
,因为该网站的真实 DNS 条目指向其他地方。这样,当我www.mysite.com
在浏览器中输入时,它会连接到该服务器的 IP 地址,然后实际向其请求www.mysite.com
。DNS 被完全绕过(这是正确的,因为我想连接到测试站点,而不是真正的站点)。