将新对象上载到CloudFront。 Curl显示文件已更改,但浏览器未更改

时间:2017-11-16 17:43:46

标签: curl caching amazon-cloudfront

我试图理解这种奇怪的行为 我在CloudFront上有一个Web分发列表,它从S3获取文件 我已经在CF中设置了

Minimum TTL: max-age=15

我可以在curl

的页眉中看到最大年龄值
Content-Type: text/html
Content-Length: 851
Connection: keep-alive
Date: Thu, 16 Nov 2017 16:48:08 GMT
Last-Modified: Thu, 16 Nov 2017 16:48:01 GMT
ETag: "6f05a132c76b8e482f8f72f3cd2aa2b1"
Cache-Control: max-age=15
Accept-Ranges: bytes
Server: AmazonS3
X-Cache: RefreshHit from cloudfront
Via: 1.1 dba4881aee9ac99f5dba4dcd7e8175b1.cloudfront.net (CloudFront)
X-Amz-Cf-Id: 8Cwu-1UPFb2BL03mvu3exf17UzWqCZVrUGvNtc2xCeVg47G1UnqVjg==

一旦我上传了包含我的更改的新html页面,如果我卷曲资源,我可以看到页面已更改。 如果我使用Firefox / Chrome打开页面,页面不会更改,并且不会遵守max-age值,因为标题中的年龄值大约为32000

date    : Thu, 16 Nov 2017 17:23:41 GMT
etag    :"8ad74acb5563f12bfd239683a3d96d75"
cache-control:15
server  :AmazonS3
age :31029
x-cache :Hit from cloudfront
via :1.1 1d3fdb2bba223d815ff2e40453…8.cloudfront.net (CloudFront)
x-amz-cf-id :ooeDeSw-_ZpMDR25_yN9VhfyJF2FeAgiklzE5QZusNRs_glDqobgcg==

我错过了什么,或者我没有考虑过?

1 个答案:

答案 0 :(得分:1)

如果S3中的对象已经缓存,那么在S3中更改对象并不会将其推送到CloudFront,因为这是...从您发出请求之前的31029秒开始。

age :31029

要从CloudFront缓存中逐出对象(强制CloudFront在下次请求对象时从原点发出新请求)需要invalidation

另请注意,最小TTL没有实际意义,因为这是CloudFront在最初缓存对象时将会尊重的最小 max-ages-maxage。当对象的最大生命周期小于最小生命周期时,它只会执行任何操作,并且一旦对象被缓存,它很可能没有任何后果。