我认为这可能无法实现,因为 TCP/IP 协议定义数据包的方式不同,但我想我还是要问一下。
有些网站(例如共享服务器上的网站)使用相同的 IP,服务器会根据请求的主机名/URL 提供网站。在这种情况下,对网站 IP 进行 DNS 查找并直接转到该 IP 通常会提供一些不是具有给定主机名的网站的其他内容。
有没有一种方式可以同时实现这两种方式并使用 IP 地址请求站点,但请求仍显示主机名/url,以便另一端的服务器仍然可以处理请求,就好像您提供了 URL 并且通过 DNS 进行了解析一样?
对我来说,具体用例是私有 DNS 服务器宕机,因此我的浏览器只能通过原始 IP(我已备份)进行访问,但网站需要 URL 才能提供正确的内容。不过,我认为,仅仅知道这是可能的就很有趣,而且这项技术总体上值得了解。
答案1
如果您修改 /etc/hosts 文件并将 IP 地址和站点添加到其中,您应该能够使用标准浏览器通过 URL 获取站点,因为该文件通常在 DNS 之前读取,并且会为您解决问题。
我不知道是否有任何浏览器(假设您不将 curl 称为浏览器)支持它,但从技术上讲,使用 IP 地址而不是 URL 来请求网站是可行的。问题在于呈现它。
为了允许单个 IP 地址上有多个 HTTP 站点,Web 浏览器使用 HTTP 1.1 规范。此规范意味着在连接到端口 80 上的 IP 地址后,浏览器会向 Web 服务器告知它想要从中获取内容的服务器的名称。因此,使用合适的 telnet 客户端,您可以获得所需站点的转储。(如果您将输出转储到文件中,您可能可以在浏览器中呈现它!)
示例会话可能如下。假设您想要获取网站“www.lightbox.net.nz/”的主页,该网站驻留在服务器上,默认情况下,如果通过 IP 地址 60.234.77.229 访问,则会产生另一个页面
telnet 60.234.77.229 80 (Typed)
Connected to 60.234.77.229. (Server Response)
Escape character is '^]'. (Server response)
GET /index.php HTTP/1.1 (Typed - to request the root web page using http/1.1 protocol)
host: www.lightbox.net.nz (Tell the server which site you want)
(blank line to tell it you have finished asking)
Output of http://www.lightbox.net.nz/index.php shown here.