重定向缓存是指浏览器或 CDN 保存重定向响应(3xx 响应),在之后的访问中不向源服务器查询而直接跳转到重定向目标的机制。在短链接服务中,它是关系到兼顾性能与点击计量的设计要素。
RFC 9110 将 301(Moved Permanently)和 308(Permanent Redirect)规定为即使没有明确的缓存指定,缓存也可按启发式有效期重用的响应(heuristically cacheable),而没有这样规定 302(Found)和 307(Temporary Redirect)。启发式有效期的长度,在 RFC 9111 中交由缓存一方决定。在使用已缓存的 301 期间,请求不会到达源服务器,延迟会降低,但短链接服务一方无法计数这些点击。302 和 307 除非用 Cache-Control 等明确指定,否则每次都经过源服务器,因此便于在服务器端记录点击。
缓存行为也可以通过 Cache-Control 头部控制。按 RFC 9111,指定 no-store 的响应不会保存到缓存,指定 max-age=0 的响应即使被保存也会立即被视为过期,原则上在重用前需要向源服务器确认。反之,对于不需要计量的重定向,可设置 public, max-age=3600 这样的 TTL,让 CDN 层缓存,从而减轻源服务器的负载。
也有在 CDN 上考虑重定向缓存的例子。CloudFront 的文档说明,它按照分发的设置和响应的头部缓存 3xx 响应(截至 2026 年 10 月)。在边缘返回已缓存响应期间,请求不会到达源服务器,因此点击计量将依赖边缘日志。
在短链接服务的设计中,需要基于重定向缓存的行为,考虑点击记录与性能之间的权衡来设计 Cache-Control。要根据用途区分使用 301 和 302,并控制缓存 TTL。