CloudFront "age" header 对 "cache-control: private; max-age=3600" 的影响
CloudFront "age" header effect on "cache-control: private; max-age=3600"
我正在为特定静态资源使用具有固定缓存时间(例如 1 天)的 CloudFront。
同时,我希望浏览器只缓存一小时,这就是为什么响应是:
cache-control: private; max-age=3600
但是,CloudFront 始终添加响应 header:
age: 35
这是缓存在代理(本例中为 CloudFront)上的秒数。
读https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching真有道理age
header没提。
可能的是 header 的值为 24678 秒,资源将被视为已过期。
我只是想确认 age
header 对本地浏览器缓存没有影响。我说得对吗?
不幸的是,经过几个小时的测试和实验,似乎无法实现我想要的 - 在 CloudFront 中长时间缓存资源(比如 1 天),但将其在浏览器中缓存 30分钟
age
header 影响 HTTP 资源的过期。
例如如果您有 cache-control: private; max-age=3600
并尝试使用 age: 4000
从 CloudFront 获取资源,则浏览器认为该资源已过期,下次必须再次为 re-downloaded。
编辑:2021 年 10 月
好消息,今年 AWS 推出了 Cloudfront Functions,这正是我们在这种情况下所需要的 - 修改发送给查看者的响应 header。
我修改的两个header是“date”,删除了“age”和“expiry”header。似乎将“日期”header设置为当前日期和时间后,不再添加“年龄”header(但我明确删除了它):
function handler(event) {
var response = event.response;
var headers = response.headers;
// Set current date
headers['date'] = {value: (new Date()).toUTCString()};
delete headers['expires'];
delete headers['age'];
return response;
}
我正在为特定静态资源使用具有固定缓存时间(例如 1 天)的 CloudFront。 同时,我希望浏览器只缓存一小时,这就是为什么响应是:
cache-control: private; max-age=3600
但是,CloudFront 始终添加响应 header:
age: 35
这是缓存在代理(本例中为 CloudFront)上的秒数。
读https://developers.google.com/web/fundamentals/performance/optimizing-content-efficiency/http-caching真有道理age
header没提。
可能的是 header 的值为 24678 秒,资源将被视为已过期。
我只是想确认 age
header 对本地浏览器缓存没有影响。我说得对吗?
不幸的是,经过几个小时的测试和实验,似乎无法实现我想要的 - 在 CloudFront 中长时间缓存资源(比如 1 天),但将其在浏览器中缓存 30分钟
age
header 影响 HTTP 资源的过期。
例如如果您有 cache-control: private; max-age=3600
并尝试使用 age: 4000
从 CloudFront 获取资源,则浏览器认为该资源已过期,下次必须再次为 re-downloaded。
编辑:2021 年 10 月
好消息,今年 AWS 推出了 Cloudfront Functions,这正是我们在这种情况下所需要的 - 修改发送给查看者的响应 header。
我修改的两个header是“date”,删除了“age”和“expiry”header。似乎将“日期”header设置为当前日期和时间后,不再添加“年龄”header(但我明确删除了它):
function handler(event) {
var response = event.response;
var headers = response.headers;
// Set current date
headers['date'] = {value: (new Date()).toUTCString()};
delete headers['expires'];
delete headers['age'];
return response;
}