这是Using 301/303/307 redirects for dynamic short urls的后续问题,我尝试在目标 url 频繁更改时确定实现短 url 重定向的最佳方法。
虽然看起来 301 和 307 重定向都以相同的方式执行,但我担心的问题是 301 重定向缓存(如此处所述) - 是避免这种情况的最佳方法,而是使用 307 重定向(我假设 307 重定向永远不会缓存?),还是显式发送无缓存标头(“缓存控制:无缓存,必须重新验证”)?
这是Using 301/303/307 redirects for dynamic short urls的后续问题,我尝试在目标 url 频繁更改时确定实现短 url 重定向的最佳方法。
虽然看起来 301 和 307 重定向都以相同的方式执行,但我担心的问题是 301 重定向缓存(如此处所述) - 是避免这种情况的最佳方法,而是使用 307 重定向(我假设 307 重定向永远不会缓存?),还是显式发送无缓存标头(“缓存控制:无缓存,必须重新验证”)?
不要试图避免 301 缓存。如果您不希望任何用户代理缓存您的重定向,那么就不要使用 301 重定向。换句话说,301 缓存将继续存在,从语义上讲,它是一个永久重定向,因此如果您打算更改目标 URL,则 301 不是要使用的正确状态代码。另一方面,默认情况下不缓存 307 响应。
在您想要 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
在 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);