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

时间:2017-02-17 09:49:53

标签: amazon-web-services cloud amazon-cloudfront

来自Amazon cloud front

  

Amazon CloudFront是一种可加快您的分发速度的网络服务   静态和动态Web内容,例如.html,.css,.php和image   文件,给您的用户。 CloudFront通过提供您的内容   全球数据中心网络称为边缘位置。

根据我的浏览器,CloudFront必须使用URL作为密钥缓存内容。 URL可以同时提供静态和动态内容。假设我有100个weburl,其中30个提供静态内容,70个提供动态内容(用户特定数据)。我对静态和动态内容都有一个问题

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

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

静态内容: - 每次发布都有可能甚至静态数据都会发生变化。云端如何知道缓存的静态内容是陈旧的,需要从服务器获取?

1 个答案:

答案 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)