考虑到 max-age 适用于所有缓存,而 s-maxage 仅适用于共享缓存(代理和网关缓存)......
在不可过期和公共页面中使用这两个指令是否有意义?
控制器伪代码:
w = Response();
w.setPublic();
w.setMaxAge("1 year");
w.setShareMaxAge("1 year");
return w;
考虑到 max-age 适用于所有缓存,而 s-maxage 仅适用于共享缓存(代理和网关缓存)......
在不可过期和公共页面中使用这两个指令是否有意义?
控制器伪代码:
w = Response();
w.setPublic();
w.setMaxAge("1 year");
w.setShareMaxAge("1 year");
return w;
14.9.3 基本过期机制的修改
...
s-maxage
如果响应包含 s-maxage 指令,那么对于共享缓存(但不针对私有缓存),此指令指定的最长期限将覆盖max-age 指令或 Expires 标头指定的最长期限。
...
注意,“覆盖”。因此,仅当您打算为共享缓存指定不同的最大年龄时才有意义,与max-age
最终用户将使用的 相比。
在您的特定示例中,它们是相同的,因此s-maxage
无需指定。
定义中要注意的关键点是共享缓存
14.9.3 基本过期机制的修改
...
s-maxage
如果响应包含 s-maxage 指令,那么对于共享缓存(但不针对私有缓存),此指令指定的最长期限将覆盖max-age 指令或 Expires 标头指定的最长期限。
...
这意味着 varnish、cloudfront、cloudflare 等反向代理/缓存的缓存期限可能与浏览器缓存不同。我个人更喜欢的价值s-maxage
高于maxage
在 HTTP 1.1 中,响应被缓存后,您无法联系浏览器来使缓存无效,但您可以将其告知 CDN。