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的明确文档?:
第一次:
任何后续时间:
答案 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结果进行测试:
我在自己的计算机上启动了代理服务器(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
。
这不是“黄金方式”,但效果很好