考虑到max-age适用于所有缓存,而s-maxage仅适用于共享缓存(代理和网关缓存)....
在不可过期和公开的页面中使用这两个指令是否有意义?
控制器伪代码:
w = Response();
w.setPublic();
w.setMaxAge("1 year");
w.setShareMaxAge("1 year");
return w;
答案 0 :(得分:26)
来自HTTP Header Field Definitions:
14.9.3基本过期机制的修改
...
S-最大生存周期
如果响应包含s-maxage指令,则对于共享缓存(但不包括私有缓存),此指令指定的最大年龄将覆盖最大指定的最大年龄 -age指令或Expires头。
...
注意,“覆盖”。因此,只有当您打算为共享缓存指定不同的最大年龄时,才会有意义,而最终用户将使用max-age
。
在您的特定示例中,它们是相同的,因此只需要指定s-maxage
。
答案 1 :(得分:7)
定义中要注意的关键点是共享缓存
来自HTTP Header Field Definitions
14.9.3基本过期机制的修改
...
S-最大生存周期
如果响应包含s-maxage指令,则共享缓存(私有缓存 ),最大值此指令指定的年龄覆盖 max-age指令或Expires标头指定的最长期限。
...
这意味着像varnish,cloudfront,cloudflare这样的反向代理/缓存可以具有与浏览器缓存不同的缓存时代。
我个人希望s-maxage
的值高于maxage
在HTTP 1.1中,一旦响应被缓存,您就无法联系浏览器以使缓存无效,但您可以将其告知CDN。