为什么使用此 IPv4 地址代替 URL 无法访问同一个网站?

为什么使用此 IPv4 地址代替 URL 无法访问同一个网站?

当我在访问时使用数据包分析器 wireshark 捕获数据包时http://en.wikipedia.org/wiki/氢我可以看到使用 HTTP 协议的数据包(例如 GET 请求)。我的 Get 请求使用 4 种协议:以太网 II、IPv4、TCP 和 HTTP。对于 IPv4,我可以看到我自己的 PC 的本地 IPv4 地址作为源,对于目标,我看到 IPv4 地址是 91.198.174.225。当我在浏览器中访问此地址时,我会转到一些与维基百科相关的网站,上面写着“wiki 不存在”。为什么我访问该 IP 地址时看不到 Hydrogen 文章?

答案1

最有可能是因为 wikipedia 正在运行虚拟主机;服务器 91.198.174.225 有多个主机名。
例如,fr.wikipedia.org 有相同的 IP 地址。一台大型机器可以有数百个虚拟主机,受该机器的 CPU、内存和带宽限制


Web 浏览器Host:会向请求添加一个标头,即您输入的 URL 中的主机名。Web 服务器将根据Host:请求的标头提供不同的“虚拟服务器”,包括不同的页面。当您使用 IP 地址访问服务器时,您会将 IP 地址作为 Host: 发送。Web 服务器具有该请求的基本配置,但可能不是您期望的配置。

答案2

多个网站通常都使用同一个 IP 地址。对于这些网站来说,在 URL 中使用 IP 地址是不够的。您必须提供正确的域名,您的浏览器会将其放入 HTTP Host 标头中,以告知服务器您想要哪个网站。

答案3

虽然您的请求在 TCP 层及以下层是相同的,但它们在 HTTP 层上有所不同。您会注意到,在您的第一个请求中,标头中的 Host 字段包含在原始 URI 中找到的主机名,而使用 IP 地址而不是主机名的请求的 Header 字段为空或仅包含 IP 地址。请参阅RFC 2616了解技术细节。

如果没有 Host 字段,服务器就不可能知道请求被定向到哪个主机。这样就无法在一个 IP 地址上使用多个主机名(包含不同的网站)。大规模网络托管效率低下,因为它需要每个主机名都有专用的 IP 地址。虚拟主机的概念解决了这个问题,它使用 Host 标头字段来区分对不同主机名的请求,并允许一个 IP 地址上有无限数量的主机名,并在每个主机名上提供不同的内容。维基百科可能使用此方法从您请求的一台服务器提供不同语言版本。如果没有主机名,您的请求将缺少请求哪种语言的信息。

相关内容