首页 文章

来自Cloudfront的HIT之后来自Cloudfront的MISS

提问于
浏览
2

我正在切换到Amazon Cloudfront以在我的网站上提供图像 . 为了减少我们最终实现时的负载,我想通过点击图像URL来预热缓存(我正在从印度提出这些请求,并期望大多数用户从同一地区请求,因此无需拥有对象的副本全球所有边缘地点) .

问题是脚本使用curl来请求图像,当我在浏览器中访问相同的URL时,我从Cloudfront获得MISS . 因此,Cloudfront为这两个请求制作了两个对象副本 .

我当前的Cloudfront配置将Content-Type请求标头转发到源 .

我应该如何配置Cloudfront以便它根本不关心请求标头,一旦我发出请求(无论是curl还是使用浏览器),它应该为来自edge而不是origin的相同资源的所有未来请求提供服务 .

请求/响应标头 - 我担心Cloudfront网址无法从外部访问(直到我们上线),但我发布请求/响应标头,这应该给你一个合理的想法 . 您还可以在原点查看缓存 Headers - https://origin.ixigo.com/image/upload/t_thumb,f_auto/r7y6ykuajvlumkp4lk2a.jpg

Response after two successive request using browser
远程地址:54.230.156.66:443
请求网址:https://youcannotaccess.com/image/upload/t_thumb,f_auto/r7y6ykuajvlumkp4lk2a.jpg
请求方法:GET
状态代码:200 OK
响应 Headers
查看源
接受-范围:字节
年龄:23
Cache-Control:public,max-age = 31557600
连接:保持活跃
内容长度:8708
内容类型:图像/ JPG
日期:2015年11月27日星期五09:16:03 GMT
ETag:"-170562206"
Last-Modified:Sun,29 Jun 2014 03:44:59 GMT
有所不同:接受编码
通过:1.1 7968275877e438c758292828c0593684.cloudfront.net(CloudFront)
X-AMZ-CF-ID:fcbGLv8uBOP89qfR52OWa-NlqWkEREJPpZpy9ix0jdq8-a4oTx7lNw ==
X-后端:image6_40
X-Cache:来自 Cloud 端
X-缓存点击数:0
X-设备:PC
X-设备类型:PC
X-已启动方式:XYZ

Now same url requested using curl but gave me miss
curl manu-mdc:cache manuc $ curl -I https://youcannotaccess.com/image/upload/t_thumb,f_auto/r7y6ykuajvlumkp4lk2a.jpg
HTTP / 1.1 200好的
内容类型:image / jpg
内容长度:8708
连接:保持活力
年龄:0
Cache-Control:public,max-age = 31557600
日期:2015年11月27日星期五09:16:47 GMT
ETag:"-170562206"
Last-Modified:Sun,29 Jun 2014 03:44:59 GMT
X-Backend:image6_40
X-Cache-Hits:0
X-Device:pc
X-DeviceType:pc
X-Powered-By:xyz
变化:接受编码
X-Cache:来自 Cloud 端的小姐
通过:1.1 4d42171c56a4c8b5c627040e6aa0938d.cloudfront.net(CloudFront)
X-Amz-Cf-Id:fY0LXhp7NlqB-I8F5-1TIMnA6bONjPD3CEp7dsyVdykP-7N2mbffvw ==

Now this will give HIT
manu-mdc:cache manuc $ curl -I https://youcannotaccess.com/image/upload/t_thumb,f_auto/r7y6ykuajvlumkp4lk2a.jpg
HTTP / 1.1 200好的
内容类型:image / jpg
内容长度:8708
连接:保持活力
Cache-Control:public,max-age = 31557600
日期:2015年11月27日星期五09:16:47 GMT
ETag:"-170562206"
Last-Modified:Sun,29 Jun 2014 03:44:59 GMT
X-Backend:image6_40
X-Cache-Hits:0
X-Device:pc
X-DeviceType:pc
X-Powered-By:xyz
年龄:3岁
变化:接受编码
X-Cache:来自 Cloud 端
通过:1.1 6877899d48ba844a34ea4378ce336f06.cloudfront.net(CloudFront)
X-Amz-Cf-Id:qpPhbLX_5t2Xj0XZuZdjWD2w-BI80DUVyL496meQkLfSEn3ikt7hNg ==

1 回答

  • 2

    这与此问题类似:Why are two requests with different clients from the same computer cache misses on cloudfront?

    根据您是否提供“Accept-Encoding:gzip”标头,CloudFront边缘服务器会单独缓存该对象 . 由于浏览器默认提供此标头,并且您的网站可能主要通过浏览器访问,我建议您更改curl调用以包含此标头 .

    我遇到了同样的问题,在我的curl调用中进行了更改之后,我在第一次尝试通过浏览器时开始从浏览器中获得命中(在进行卷曲调用之后) .

    我注意到的另一件事是CloudFront要求在缓存之前下载完整的请求对象 . 如果尝试通过在curl中指定字节范围来部分下载文件,则不会缓存目标对象,只会将下载的部分缓存为其他对象 . 在两者之间终止的卷曲也是如此 . 我尝试的其他选项是使用spider选项进行wget调用,但内部仅执行HEAD调用,因此不会将内容缓存在边缘服务器上 .

相关问题