已经提出了这个问题的多种变体,但我似乎找不到令人满意的答案。
我将以下内容添加到我的.htaccess文件
Redirect 302 /test1 /test
然后浏览网站。我被重定向到/ test 然后我删除重定向,然后再次浏览到该网站。在Chrome,Firefox和Internet Explorer(2017-04-14的最新版本)中,浏览器使用缓存重定向,并将我发送到/ test。在Edge上,我得到/ test1。
正如其他问题所述,根据the RFC,这是 kindof 确定:
Since the redirection might be altered on occasion, the client SHOULD continue to use the Request-URI for future requests.
请注意,RFC含义中的“应该”意味着它是建议的,但不是强制性的。所以建议不来缓存重定向(因此,转到/ test1),但无论如何都要 ok 来缓存它。我不明白为什么浏览器不遵循这里的RFC建议,......但就是那样。
然后是303重定向:
The 303 response MUST NOT be cached, but the response to the second (redirected) request might be cacheable.
我测试了这个。鉴于RFC,此重定向 MUST NOT (如 ever )将被缓存。 Edge和Firefox在这里玩得很好,不要缓存它。 Internet Explorer和Chrome似乎决定直截了当地忽略RFC,并继续发送给/ test。
这些已知的错误是什么? 我误解了RFC吗? 是否有任何方式,以确保我的重定向不会被缓存?
使用RewriteRule的唯一解决方案是什么?浏览器无法缓存目标URL,因为它们从未看到它们,并且往往不会缓存目标位置,因此这对我有用。 (感谢@Olaf Dietsche)
RewriteRule ^test1 /test
(在我的用例中,我想将web.com/file.pdf之类的内容重定向到另一个文件。没有HTML页面我可以添加no-cache参数。用户手动在浏览器中输入此URL )
答案 0 :(得分:2)
the RFC(2616)声明
此文件已被取代。
确切地说,它是RFC 7231,明确指出“已废弃:2616”。在这种情况下,相关部分为303 See Other,尤其是Appendix B. Changes from RFC 2616
303(请参阅其他)状态代码的说明已更改 如果给出显式新鲜度信息,则允许它被缓存, 并且已经为针对GET的303响应添加了特定的定义。 (第6.4.4节)
因此在某些情况下,允许缓存303响应。