是否有意义有在Cache-Control HTTP头信息最大生存周期和S-最大生存周期?(Does

2019-08-22 07:56发布

考虑到最大生存周期适用于所有高速缓存,以及S-最大生存周期只适用于共享缓存(代理和网关缓存)....

是否有意义在非可到期和公共页面同时使用的指令?

控制器的伪代码:

w = Response();
w.setPublic();
w.setMaxAge("1 year");
w.setShareMaxAge("1 year");

return w;

Answer 1:

从HTTP标头字段定义 :

基本过期机制14.9.3修改

...

S-最大生存周期

如果响应包括S-最大生存周期指令,则对于一个共享缓存(但不包括专用高速缓存)中,由该指令所指定的最大年龄覆盖由任一最大生存周期指令或Expires头中指定的最长期限。

...

请注意,“ 覆盖 ”。 所以,如果你打算相比,指定不同的最高年龄为共享缓存只会意义max-age ,这将最终用户使用。

在您的具体的例子,它们是相同的,因此指定s-maxage就是不必要的。



Answer 2:

关键点在定义需要注意的是共享缓存

从HTTP头字段定义

基本过期机制14.9.3修改

...

S-最大生存周期

如果响应包括S-最大生存周期指令,则对于一个共享缓存 (但包括专用高速缓存 )中,由该指令所指定的最大年龄覆盖由任一最大生存周期指令或Expires头中指定的最长期限。

...

这意味着,像清漆,CloudFront的反向代理/缓存的CloudFlare可以有浏览器缓存不同的缓存年龄。 我个人比较喜欢的值s-maxage要高于maxage

在HTTP 1.1一旦响应缓存,无法联系到浏览器的缓存无效,但你可以告诉它的CDN。



文章来源: Does it make sense to have max-age and s-maxage in the Cache-Control HTTP header?