避免301重定向缓存

Yar*_*rin 14 redirect caching no-cache http-status-code-301 http-status-code-307

这是使用301/303/307重定向到动态短网址的后续问题,我尝试确定在目标网址频繁更改时实施短网址重定向的最佳方法.

虽然看起来301和307重定向都以相同的方式执行,但我关注的问题是301重定向缓存(如此处所述) - 是避免使用307重定向的最佳方法(我假设307重定向永远不会缓存?),或显式发送无缓存标头("缓存控制:无缓存,必须重新验证")?

Mau*_*fer 19

不要试图避免301缓存.如果您不希望任何用户代理缓存重定向,则只需不使用301重定向.换句话说,301缓存将保留,从语义上讲,它是永久重定向,因此如果您计划更改目标URL,则301不是正确的状态代码.另一方面,默认情况下不会缓存307个响应.

  • 你读的名字太多了.没有什么是永恒.域名出售.公司破产了.甚至存在技术限制阻止这种情况:http://tools.ietf.org/html/draft-ietf-httpbis-p6-cache-24#page-28` [...]已经证明极大的值会导致问题[...]`总之:"永远"只是意味着`直到资源被删除,或相当长的时间 (6认同)
  • 最后一点是你遗漏的:`301`是URI规范化的唯一合理回应.代码`303`和`307`要求客户端重复对原始URI的请求(打败URI规范化点):http://tools.ietf.org/html/draft-ietf-httpbis-p2-semantics-24#第6.4.7节由于重定向可能会随着时间的推移而发生变化,因此客户端应继续使用原始有效请求URI以用于将来的请求.URI规范化意味着客户端应该能够使用规范URI而不是重定向到它们的别名.代码`303`和`307`阻止了这一点. (4认同)
  • 您的解释违反了HTTP规范.当客户端出现在301上时,客户端必须遵循"Cache-Control". (3认同)
  • 你是关于一件事的:你想要在没有缓存的情况下重定向.在这种情况下,`307`是更好的解决方案.我只是说`301`与`Cache-Control`标题完全合理,不应排除其他用途. (2认同)

Tim*_*nen 10

在您需要301重定向带来的行为的情况下,例如浏览器书签的更新和google bot中URL的更改,但同时想要跟踪重定向或执行其他类型的功能,您始终可以添加缓存控件标题为"无缓存"

HTTP/1.0 301 Moved Permanently
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Expires: Sat, 26 Jul 1997 05:00:00 GMT
Location: http://example.com
Run Code Online (Sandbox Code Playgroud)

在PHP中它看起来像这样:

header('Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0');
header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
header('Location:'.$url, true, 301);
Run Code Online (Sandbox Code Playgroud)

相关:https: //stackoverflow.com/a/19003320/175071