在我尝试回答你的问题之前,让我有点挑剔:)
首先,您将两种不同的协议([DNS] 和 [HTTP])混淆并混合在一起,实际上维基百科甚至有一个专门的页面用于 HTTP 301 响应:http ://en.wikipedia.org/wiki/HTTP_301 (但您应该阅读整个 shebang:([Wikipedia, search for HTTP] 总是一个好的开始,[RFC 2616] 绝对是必须的,IETF RFC 不容易阅读,但互联网是建立在它们之上的)。
DNS 用于将名称www.example.com
转换为IP 地址等,192.168.0.1
以便在 Internet 上定位机器。因此,DNS 是浏览器解析URL所采取的第一步:但是一旦“机器名称”被单独的 DNS 服务翻译,并且它已成为 IP 地址,DNS 工作就结束了,并且它不再被使用/参与。
然后,当浏览器使用 HTTP 联系位于该机器上的 Web 服务器(在本例中为机器,在我们的示例中, www.example.com
DNS 服务已将其转换为IP 地址192.168.0.1
,因为操作系统只能使用IP 地址作为[internet socket] 的参数),并且仅在那个时候,Web 服务器而不是提供页面,而是以“错误”代码(实际上是带有不以数字开头的数字代码的“响应标头” “2”)。
只是这个错误代码实际上是用来告诉其他事情的:浏览器应该再次尝试“HTTP请求”,这次连接到另一台机器(并且,只要这个重定向是“永久的”而不是“临时的”([ HTTP_307]),新地址应该被浏览器记住,它的缓存和历史)。
所以,如果你可以在第一台机器上设置 [redirection response header],这意味着在第一台机器上有一个 Web 服务器被编程(给定一个特定的 URL 模式)来吐出一个重定向头,只要你可以控制这些重定向,您也可以将浏览器发送到您想要的任何地方,不仅可以将它们发送到 Internet 上的另一台机器,还可以发送到另一个 URL,甚至在同一个网站上(实际上这是代码 301 的原始预期用途,作为针对 [link rot] 的措施)。
基本上,您可以自由地做任何您想做的事情,或者更好的是,将它们发送到您想要的任何地方。
优点是显而易见的......缺点是您必须控制第一个 Web 服务器,并且访问的浏览器必须执行两个“GET 请求”才能到达预期的页面(这并不可怕,因为它看起来,因为 [RFC 2616] 建议浏览器(他们称之为用户代理)缓存并记住重定向(因为它是
永久的))。
免责声明:我被禁止发布超链接,但它们基本上都来自维基百科,所以,如果你愿意,你可以在维基百科上查看括号“[...]”中的单词......