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

Internet explorer 处理301重定向时的客户端Web浏览器行为,internet-explorer,firefox,webclient,http-status-code-301,behavior,Internet Explorer,Firefox,Webclient,Http Status Code 301,Behavior,RFC似乎建议客户端永久缓存响应: 10.3.2 301永久移动 请求的资源已被删除 分配了一个新的永久URI和任何 今后对该资源的引用 应使用其中一个返回的URI。 具有链接编辑功能的客户端 应该自动重新链接 对请求URI的引用为1 一个或多个新引用返回 在可能的情况下,由服务器执行。这 除非另有说明,否则响应是可缓存的 否则 应该给出新的永久URI 通过响应中的位置字段。 除非请求方法是HEAD, 响应的实体应该是 包含带有 指向新URI的超链接 如果在中收到301状态代码 对GET以外的

RFC似乎建议客户端永久缓存响应:

10.3.2 301永久移动

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

应该给出新的永久URI 通过响应中的位置字段。 除非请求方法是HEAD, 响应的实体应该是 包含带有 指向新URI的超链接

如果在中收到301状态代码 对GET以外的请求的响应 或者,用户代理不能 自动重定向请求 除非能得到业主的确认 用户,因为这可能会更改 提出请求的条件 发布

  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解释链接,没有缓存。发送GET到站点A。
  • 1.2:站点A响应301重定向到站点B
  • 1.3:浏览器将GET发送到站点B。
随后的任何时间:
  • 2.2:用户点击指向站点a的链接
  • 2.2:浏览器看到,由于过去的301重定向,站点a现在应该是站点B。
  • 2.3:不在站点A发起任何请求,浏览器在站点B发起GET。

    我进行了一些测试,发现一些浏览器确实缓存了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结果并在将来跳过联系旧地址? Internet Explorer 7号 火狐3.0版本 Chrome 4.0是的 Opera 10.01 google.com为是,www.rnhart.net为否 我是如何测试的 我使用以下两个301结果进行测试:

    • google.com将301返回到www.google.com
    • www.rnhart.net将301返回给rnhart.net
    我在自己的计算机上启动了一个代理服务器(Naoko4.2,关闭了所有过滤器)。在每个浏览器中,我将代理设置设置为指向我自己的计算机。我清除了浏览器的缓存,然后多次访问旧地址,并查看代理服务器的日志窗口,查看浏览器发出的请求

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

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



    [我在调查一个类似的超级用户问题时发现了这个问题:

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


    这不是“黄金之路”,但效果很好

    Bavi_H,你的测试结果与你提到的类似问题不同(你实际上对Chrome和Opera说“不”)。你能更新你的答案吗?@Jesper Rønn Jensen:这些问题问的是不同的事情(如果书签地址被更改;如果与旧服务器的连接被跳过)。谢谢你的澄清Bavi_H:)