man*_*543 4 curl cdn cache-control amazon-web-services amazon-cloudfront
我正在切换到 Amazon Cloudfront 在我的网站上提供图像。为了减少我们最终上线时的负载,我想到通过点击图像 URL 来预热缓存(我从印度发出这些请求,并希望大多数用户从同一区域发出请求,因此不需要在全球所有边缘站点)。
问题是脚本使用curl来请求图像,当我在浏览器中访问相同的URL时,我从Cloudfront得到MISS。因此,Cloudfront 正在为这两个请求制作两个对象副本。
我当前的 Cloudfront 配置将 Content-Type 请求标头转发到源。
我应该如何配置Cloudfront,以便它根本不关心请求标头,并且一旦我发出请求(无论是curl还是使用浏览器),它应该为来自边缘而不是源的相同资源的所有未来请求提供服务。
请求/响应标头-我担心 Cloudfront url 无法从外部访问(直到我们上线),但我发布了请求/响应标头,这应该会给您一个公平的想法。您还可以在原点查看缓存标头 - https://origin.ixigo.com/image/upload/t_thumb,f_auto/r7y6ykuajvlumkp4lk2a.jpg
使用浏览器连续两次请求后的响应
远程地址:54.230.156.66:443
请求 URL: https: //youcannotaccess.com/image/upload/t_thumb,f_auto/r7y6ykuajvlumkp4lk2a.jpg
请求方法:GET
状态代码:200 OK
响应标头
查看源代码
接受范围:字节
年龄:23
缓存控制:公共,最大年龄 = 31557600
连接:保持活动
内容长度:8708
内容类型:图像/jpg
日期:2015 年 11 月 27 日星期五 09:16:03 GMT
ETag :“-170562206”
最后修改时间:2014 年 6 月 29 日星期日 03:44:59 GMT
变化:接受编码
通过:1.1 7968275877e438c758292828c0593684.cloudfront.net (CloudFront)
X-Amz-Cf-Id:fcbGLv8uBOP89qfR5 2OWa-NlqWkEREJPpZpy9ix0jdq8-a4oTx7lNw= =
X-Backend:image6_40
X-Cache:来自云端的命中
X-Cache-Hits:0
X-Device:pc
X-DeviceType:pc
X-Powered-By:xyz
现在使用curl请求相同的url,但让我错过了
curl manu-mdc:cache manuc$curl -I https://youcannotaccess.com/image/upload/t_thumb,f_auto/r7y6ykuajvlumkp4lk2a.jpg
HTTP/1.1 200 OK
Content-Type: image /jpg
内容长度: 8708
连接: keep-alive
年龄: 0
缓存控制: public, max-age=31557600
日期: 星期五, 2015 年 11 月 27 日 09:16:47 GMT
ETag: "-170562206"
最后修改时间: Sun ,2014 年 6 月 29 日 03:44:59 GMT
X-后端:image6_40
X-Cache-Hits:0
X-设备:pc
X-DeviceType:pc
X-Powered-By:xyz
变化:接受编码
X-Cache:缺少来自云前
通过:1.1 4d42171c56a4c8b5c627040e6aa0938d.cloudfront.net(CloudFront)
X-Amz-Cf-Id:fY0LXhp7NlqB-I8F5-1TIMnA6bONjPD3CEp7dsyVdykP-7N2mbffvw==
现在这将给出 HIT
manu-mdc:cache manuc$ curl -I https://youcannotaccess.com/image/upload/t_thumb,f_auto/r7y6ykuajvlumkp4lk2a.jpg
HTTP/1.1 200 OK
Content-Type: image/jpg
Content-Length: 8708
连接:保持活动状态
缓存控制:public,max-age=31557600
日期:2015 年 11 月 27 日星期五 09:16:47 GMT
ETag:“-170562206”
最后修改时间:2014 年 6 月 29 日星期日 03:44:59 GMT
X-后端:image6_40
X-Cache-Hits:0
X-设备:pc
X-DeviceType:pc
X-Powered-By:xyz
年龄:3
变化:接受编码
X-Cache:来自 cloudfront
通过:1.1 6877899d48ba844a34ea4378ce336f06。 cloudfront.net (CloudFront)
X-Amz-Cf-Id: qpPhbLX_5t2Xj0XZuZdjWD2w-BI80DUVyL496meQkLfSEn3ikt7hNg==
这类似于这个问题:为什么来自同一台计算机的不同客户端的两个请求在cloudfront上会丢失?
根据您是否提供“Accept-Encoding: gzip”标头,CloudFront 边缘服务器会单独缓存对象。由于浏览器默认提供此标头,并且您的网站可能主要通过浏览器访问,因此我建议更改您的curl 调用以包含此标头。
我面临着同样的问题,在我的curl调用中进行更改后,我在第一次通过浏览器尝试时(在进行curl调用之后)开始从浏览器中获得点击。
我注意到的另一件事是,CloudFront 要求在缓存之前下载完整的请求对象。如果您尝试通过在curl中指定字节范围来部分下载文件,则预期的对象不会被缓存,只有下载的部分会被缓存为不同的对象。对于在两者之间终止的卷曲也是如此。我尝试的其他选项是带有蜘蛛选项的 wget 调用,但内部仅执行 HEAD 调用,因此不会获取边缘服务器上缓存的内容。
| 归档时间: |
|
| 查看次数: |
13023 次 |
| 最近记录: |