Amazon CloudFront是一种可加快您的分发速度的网络服务 静态和动态Web内容,例如.html,.css,.php和image 文件,给您的用户。 CloudFront通过提供您的内容 全球数据中心网络称为边缘位置。
根据我的浏览器,CloudFront必须使用URL作为密钥缓存内容。 URL可以同时提供静态和动态内容。假设我有100个weburl,其中30个提供静态内容,70个提供动态内容(用户特定数据)。我对静态和动态内容都有一个问题
动态内容: - 假设user_A通过来自美国的url_A访问他的数据。该数据已被缓存。他更新了第一个名字。现在,同一个用户将从美国或来自同一位置访问数据 英国的另一个地方。我们在更新之前看到了数据。如果是,边缘位置如何知道需要从服务器而不是从缓存中获取数据? 边缘位置是否继续在缓存中显示可配置的时间量数据,如果时间过去,则从服务器获取它?
cloudfront是否允许配置需要从服务器而不是缓存中提取的特定URL?
静态内容: - 每次发布都有可能甚至静态数据都会发生变化。云端如何知道缓存的静态内容是陈旧的,需要从服务器获取?
答案 0 :(得分:1)
Amazon CloudFront使用您指定的到期时间段(或生存时间 - TTL)。
对于静态内容,您可以为分配设置默认TTL,也可以将TTL指定为标题的一部分。当TTL过期时,CloudFront边缘位置将检查对象上次修改时间戳是否已更改。如果它已更改,它将获取更新的副本。如果未更改,它将继续为新时间段提供现有副本。
如果静态内容已更改,则您的应用程序必须发送无效请求,以告知CloudFront即使在TTL未过期时也会重新加载对象。
对于动态内容,您的应用通常会将TTL指定为零。因此,将始终从源获取该URL,允许服务器修改用户的内容。
一半的方法是使用参数(例如user=fred
)。配置CloudFront分配时,您可以指定是否应将其他参数(例如app.use(function(req, res, next) {
var oneof = false;
if(req.headers.origin) {
res.header('Access-Control-Allow-Origin', req.headers.origin);
oneof = true;
}
if(req.headers['access-control-request-method']) {
res.header('Access-Control-Allow-Methods', req.headers['access-control-request-method']);
oneof = true;
}
if(req.headers['access-control-request-headers']) {
res.header('Access-Control-Allow-Headers', req.headers['access-control-request-headers']);
oneof = true;
}
if(oneof) {
res.header('Access-Control-Max-Age', 60 * 60 * 24 * 365);
}
// intercept OPTIONS method
if (oneof && req.method == 'OPTIONS') {
res.send(200);
}
else {
next();
}
});
)视为单独的对象,或者是否应将其忽略。
另请注意,每个CloudFront边缘位置都有自己的缓存。所以,如果有人从美国访问了一个页面,那么不会导致它在英国缓存。
请参阅文档:Specifying How Long Objects Stay in a CloudFront Edge Cache (Expiration)