Cloudfront 决定从缓存或服务器获取数据?

Cloudfront decision to fetch data from cache or server?

来自Amazon cloud front

Amazon CloudFront is a web service that speeds up distribution of your static and dynamic web content, such as .html, .css, .php, and image files, to your users. CloudFront delivers your content through a worldwide network of data centers called edge locations.

根据我的理解,CloudFront 必须以 URL 作为键来缓存内容。 URL 可以提供静态和动态内容。假设我有 100 个 weburl,其中 30 个提供静态内容,70 个提供动态内容(用户特定数据)。我对静态和动态内容各有一个问题

动态内容:- 假设 user_A 从美国通过 url_A 访问他的数据。该数据已被缓存。他更新了名字。现在同一用户将从美国的同一位置或从 在英国的另一个位置。我们在更新之前看到数据。如果是,边缘位置将如何知道需要从服务器而不是缓存中获取数据? 边缘位置是否会在可配置的时间内继续显示缓存中的数据,如果时间已过,则从服务器获取数据?

cloudfront 是否允许配置特定的 URL 需要始终从服务器而不是缓存中获取?

静态内容:- 甚至静态数据也有可能随着每次发布而改变。云端如何知道缓存的静态内容已过时并且需要从服务器获取?

Amazon CloudFront 使用您指定的有效期(或生存时间 - TTL)。

对于静态内容,您可以为分发设置默认 TTL,也可以将 TTL 指定为 headers 的一部分。当 TTL 过期时,CloudFront 边缘站点将检查 object 上的 Last Modified 时间戳是否已更改。如果它已更改,它将获取更新的副本。如果未更改,它将在新的时间段内继续提供现有副本。

如果静态内容已更改,您的应用程序必须发送无效请求 以告知 CloudFront 重新加载 object,即使 TTL 尚未过期也是如此。

对于动态内容,您的应用程序通常会将 TTL 指定为零。因此,URL 将始终从源中获取,从而允许服务器为用户修改内容。

一个half-and-half方法是使用参数(例如xx.cloudfront.net/info.html?user=foo)。配置 CloudFront 分配时,您可以指定是否应将不同的参数(例如 user=fred)视为单独的 object 或是否应将其忽略。

另外,请注意每个 CloudFront 边缘站点 都有自己的缓存。因此,如果有人从美国访问了一个页面,那将 不会 导致它被缓存在英国。

查看文档:Specifying How Long Objects Stay in a CloudFront Edge Cache (Expiration)