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

时间:2010-04-19 08:27:39

标签: internet-explorer firefox webclient http-status-code-301 behavior

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

  

10.3.2 301永久移动

     

请求的资源已经存在   分配了一个新的永久URI和任何   以后对此资源的引用   应该使用其中一个返回的URI。   具有链接编辑功能的客户端   应该自动重新链接   对一个Request-URI的引用   或更多返回的新引用   在可能的情况下由服务器。这个   除非另有说明,否则响应可缓存   否则。

     

应该给出新的永久URI   通过响应中的位置字段。   除非请求方法是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.

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

我已经开始挖掘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。

  • 2 个答案:

    答案 0 :(得分: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将301返回www.google.com
    • www.rnhart.net将301返回给rnhart.net

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

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

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


    [我在调查类似的超级用户问题时发现了这个问题:Do browsers change URLs of saved bookmarks in response to 301 redirection?]

    答案 1 :(得分:-1)

    您可以使用此解决方法
    为用户重定向302,仅为搜索引擎重定向301。 在服务器端,只需检查用户代理。如果是机器人,请执行301重定向。否则,请302

    这不是“黄金方式”,但效果很好