在CloudFront中处理带有标头Accept-Encoding的请求与没有标头Accept-Encoding的请求的处理

时间:2019-04-03 14:12:14

标签: amazon-cloudfront

我有一个Cloud Front Distribution来缓存我的图像。我的原始服务器不是S3,而是我运行的某些服务器。

我在我的网站中使用这些图像(利用CF缓存的优势)。现在解释问题,让我们在我的主页中假设我使用的是名为banner.png的图像。

我第一次访问我的主页时,说的是chrome-对于banner.png,它是缓存未命中的对象,因此它被从原处获取并缓存在CF中。

此后,我使用邮递员this all gets me the file from CF cache从FF,opera,Chromium,GET“ banner.png”访问了我的页面。

现在我使用失眠(另一个休息客户)-Now CF doesn't send me from cache, it goes back to origin to get the image, and reply me with **"x-cache: RefreshHit from cloudfront"**来获取“ banner.png”。

这两组客户端之间的区别是,第一组客户端在请求中发送“ Accept-Encoding:gzip” 标头,而第二个客户端未发送。

我的CF行为-

  

“基于所选请求标头的缓存” =无

     

自动对象” =“否”压缩

任何指针吗?

1 个答案:

答案 0 :(得分:-1)

CloudFront基于接受编码保留两个不同的缓存副本。

  1. 如果标头包含接受编码,则为一个:gzip

  2. 接受编码:任何其他值或没有标题。

您可以使用curl进行测试,首先不使用accept-encoding,然后使用带有accept-encoding:gzip的第二个请求,您将看到CloudFront的MISS,这在CloudFront中是可以预期的。

原因是CloudFront仅支持gzip压缩,并且考虑了此标头以了解是否需要压缩响应。

但是,您的问题似乎有所不同,当CloudFront TTLs / Max-age到期并且CloudFront对源进行条件GET以确定内容是否被修改时,您会看到来自CloudFront的Refersh。 理想情况下,如果不存在接受标头,则应为CloudFront小姐。