7

我想提高我的网站加载速度,所以我使用http://gtmetrix.com/来检查我可以改进的地方。我获得的“利用浏览器缓存”评分最低之一。我发现,我的文件(主要是图像)存在“未指定过期”的问题。

好的,问题很清楚,我想。我开始搜索,发现亚马逊 S3 更喜欢 Cache-Control 元数据而不是到期日期(我丢失了这个链接,现在我想也许我误解了一些东西)。无论如何,我开始寻找如何将缓存控制元添加到 S3 对象。我找到了这个页面:http ://www.bucketexplorer.com/documentation/amazon-s3--how-to-set-cache-control-header-for-s3-object.html

我了解到,我必须在 PUT 查询中添加字符串。

x-amz-meta-Cache-Control : max-age= <value in seconds>//(等号和数字之间不需要空格(我这里弄错了))。

我使用建筑:Cache-control:max-age=1296000它工作正常。

之后,我阅读了 https://developers.google.com/speed/docs/best-practices/caching 这篇文章告诉我:1)“将 Expires 设置为至少一个月,最好在未来一年。”

2) “我们更喜欢 Expires 而不是 Cache-Control: max-age,因为它得到了更广泛的支持。”(在建议主题中)。

因此,我开始寻找将到期日期设置为 S3 对象的方法。我发现了这个: http ://www.bucketexplorer.com/documentation/amazon-s3--set-object-expiration-on-amazon-s3-objects-put-get-delete-bucket-lifecycle.html

我发现:“使用 Amazon S3 对象生命周期管理,您可以在 Amazon S3 对象上定义对象到期。一旦为 S3 对象定义的生命周期到期,Amazon S3 将删除此类对象。因此,当您想要保留数据时仅在 S3 上的有限时间,并且您希望它被 Amazon S3 自动删除,您可以设置对象过期。”

我不想从 S3 中删除我的文件。我只想添加缓存元以获得最大缓存时间或/和文件到期时间。

我完全对此感到困惑。有人可以解释我必须使用什么:对象过期或缓存控制吗?

4

3 回答 3

8

S3 允许您为缓存控制指定 max-age 和 Expires 标头,CloudFront 允许您为缓存行为指定最小 TTL、最大 TTL 和默认 TTL。这些标头只是告诉缓存中对象的有效性何时到期(无论是云端还是浏览器缓存)以阅读它们的相关性阅读以下链接 http://docs.aws.amazon.com/AmazonCloudFront/latest/ DeveloperGuide/Expiration.html#ExpirationDownloadDist

为了让您利用浏览器缓存,只需为 s3 上的所有对象指定缓存控制标头,执行 为您的存储桶中的现有对象添加缓存控制的步骤

  1. git 克隆https://github.com/s3tools/s3cmd
  2. 运行 s3cmd --configure (您将被要求输入两个密钥 - 从您的确认电子邮件或您的亚马逊帐户页面复制并粘贴它们。复制它们时要小心!它们区分大小写,必须准确输入,否则您将保留收到有关无效签名或类似情况的错误。请记住将 s3:ListAllMyBuckets 权限添加到密钥,否则在测试访问时会收到 AccessDenied 错误。)
  3. ./s3cmd --recursive modify --add-header="Cache-Control:public ,max-age= 31536000" s3://your_bucket_name/
于 2016-02-04T14:19:52.663 回答
7

您的文件不会被删除,只是在过期日期之后不会被缓存。

亚马逊文档说

在 Expires 标头中的到期日期和时间过去后,每次边缘站点收到对象请求时,CloudFront 都会再次从源服务器获取对象。

我们建议您使用 Cache-Control max-age 指令而不是 Expires 标头字段来控制对象缓存。如果您同时为 Cache-Control max-age 和 Expires 指定值,CloudFront 仅使用 max-age 的值。

于 2013-10-07T15:48:59.887 回答
3

“Amazon S3 对象生命周期管理”根据您可以定义的规则从您的存储桶中刷新一些对象。这只是关于存储。

您要做的是在设置 Cache-Control 标头时设置 HTTP 请求的 Expires 标头。它的工作原理相同:您只需将此标头添加到您的 PUT 查询中。Expires 不能作为 Cache-Control: Expires 给出一个日期。例如:2013 年 1 月 31 日星期六 23:59:59 GMT

您可以阅读以下内容:https ://web.archive.org/web/20130531222309/http://www.newvem.com/how-to-add-caching-headers-to-your-objects-using-amazon-s3 /

于 2013-09-26T16:35:36.793 回答