考虑到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;
来自HTTP头字段定义:
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。
{"age": "2604", "cache-control": "public, s-maxage=2700", "last-modified": "thu, 26 mar 2020 18:32:56 gmt"}
,那么浏览器缓存正确计算的新鲜时间是多少?是2700-2604=96秒
还是10%*(当前时间 - 最后修改时间)
? - weefwefwqg3
{"cache-control": "s-maxage=120, public", "etag": "w/12830-1542793456000", "last-modified": "wed, 21 nov 2018 09:44:16 gmt"}
,那么浏览器缓存计算出的正确的 freshness_time 是什么?是120s
还是10%*(current-time - last-modified)
? - weefwefwqg3