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真有道理ageheader没提。 可能的是 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;
}