PUT返回旧数据后从CloudFront获取GET

时间:2015-01-01 12:23:26

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

我正在使用CloudFront访问我的S3存储桶。 我执行GET和PUT操作来检索和更新数据。问题是在我发送带有新数据的PUT请求之后,GET请求仍然返回旧数据。我确实看到该文件在S3存储桶中更新。 我正在从iOS应用程序执行GET和PUT。但是,我尝试使用常规浏览器执行GET请求,但我仍然收到较旧的数据。 除了让CloudFront刷新其数据外,我是否还需要做任何事情?

2 个答案:

答案 0 :(得分:2)

Cloudfront会缓存您的数据。多长时间取决于源服务内容的标头和分发设置。

亚马逊有一个document,其中包含了互动的完整结果,但如果您没有设置缓存控制标头,而不是更改任何云端设置,那么默认情况下,数据会缓存最多24小时

你可以:

  • 设置标题,指示缓存内容的时间(例如Cache-Control: max-age=300以允许缓存最多5分钟)。你是如何做到这一点取决于你如何上传内容,在紧要关头你可以使用控制台

  • 使用console / api使内容无效。请注意,每月只有前1000次失效免费 - 超出亚马逊的收费标准。此外,无效处理需要10-15分钟。

  • 更改s3数据的命名策略,以便以不同的名称提供新数据(在您的情况下可能不太相关)

答案 1 :(得分:1)

当您将对象PUT通过Cloudfront发送到S3时,Cloudfront 代理PUT请求发送回S3,而无需解释在Cloudfront中......所以PUT请求会更改S3对象,但是对象的旧版本(如果已缓存)没有理由从Cloudfront缓存中逐出,并且会继续提供服务直到它为止已过期,被驱逐或无效。

“Cloudfront缓存不是一件事。 Cloudfront拥有超过50个全球边缘位置(请求路由到应该是最接近的位置,使用地理定位DNS),并且对象仅缓存在请求它们的位置。发送无效请求以从缓存中清除对象会导致AWS上的后台进程联系所有边缘位置并请求清除对象(如果存在)。

那么以这种方式上传有什么意义呢?这一点与数据包丢失,延迟和整体网络性能对TCP连接吞吐量的影响有关。

Cloudfront边缘位置通过高带宽,低损耗,低延迟(在物理定律范围内)连接连接到S3区域...因此从Cloudfront的“背面”到S3的连接可能是一种比浏览器能够建立的更高质量的连接。

由于Cloudfront边缘位置也可能比S3更接近浏览器,因此浏览器连接可能具有更高的质量和更高的弹性......从而提高端到端逻辑的网络质量连接,将其分成两个连接。此功能仅与性能有关:

http://aws.amazon.com/blogs/aws/amazon-cloudfront-content-uploads-post-put-other-methods/

如果您没有任何问题直接发送到S3,那么“通过”Cloudfront上传服务的目的不大。