处理301重定向时的客户端Web浏览器行为

Jon*_*son 19 firefox internet-explorer webclient behavior http-status-code-301

RFC似乎建议客户端永久缓存响应:http: //www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

10.3.2 301永久移动

已为所请求的资源分配了一个新的永久URI,并且此资源的任何将来的引用应该使用返回的URI之一.具有链接编辑功能的客户端应尽可能自动将对Request-URI的引用重新链接到服务器返回的一个或多个新引用.除非另有说明,否则该响应是可缓存的.

新的永久URI应该由响应中的Location字段给出.除非请求方法是HEAD,否则响应的实体应该包含一个带有指向新URI的超链接的短超文本注释.

如果收到301状态代码以响应GET或HEAD以外的请求,则用户代理不得自动重定向请求,除非用户可以确认,因为这可能会改变发出请求的条件.

  Note: When automatically redirecting a POST request after
  receiving a 301 status code, some existing HTTP/1.0 user agents
  will erroneously change it into a GET request.
Run Code Online (Sandbox Code Playgroud)

我很难找到任何主要浏览器的具体浏览器文档,说明他们如何处理这些.

我已经开始挖掘firefox的源代码,但很快就迷路了.

对于哪些(如果有的话)浏览器,以下情况是否属实,并且是否有适用于Firefox或IE的权威文档?:

第一次:

  • 1.1:用户输入指向站点A的链接,或点击指向站点A的链接
  • 1.2:浏览器首次解释站点A的链接,没有缓存.向站点A发送GET.
  • 1.2:站点A响应301重定向到站点B.
  • 1.3:浏览器向站点B发送GET.

任何后续时间:

  • 2.2:用户点击指向站点A的链接
  • 2.2:浏览器发现,由于过去的301重定向,站点A现在应该是站点B.
  • 2.3:如果没有在站点A发起任何请求,浏览器会在站点B发起GET.

  • 小智 12

    我做了一些测试,发现有些浏览器会缓存301结果:

    Caches 301 result and skips contacting old address in future?
    
      Internet Explorer 7   no
      Firefox 3.0           no
      Chrome 4.0            yes
      Opera 10.01           yes for google.com, no for www.rnhart.net
    

    我是如何测试的

    我使用以下两个301结果来测试:

    • google.com向www.google.com返回301
    • www.rnhart.net返回301到rnhart.net

    我在自己的计算机上启动了代理服务器(Proxomitron Naoko 4.2,关闭所有过滤器).在每个浏览器中,我将代理设置设置为指向我自己的计算机.我清除了浏览器的缓存,然后多次访问旧地址并查看代理服务器的日志窗口以查看浏览器发出的请求.

    第一次访问旧地址时,代理日志显示旧地址请求,301响应和新地址请求.如果再次访问旧地址,则日志显示相同的请求集(301未缓存),或者仅显示新地址请求(301已缓存).

    我测试了在地址栏中输入旧地址,从书签访问旧地址,以及从页面上的链接访问旧地址.无论访问地址如何,每个浏览器都以相同的方式工作.


    [我在调查类似的超级用户问题时发现了这个问题:浏览器是否更改已保存书签的URL以响应301重定向?]