【问题标题】:Leverage browser caching - external images利用浏览器缓存 - 外部图像
【发布时间】:2014-02-12 13:58:11
【问题描述】:

我已经能够正确(我认为)在 IIS 上启用缓存。现在唯一的问题是,当我运行 Google 的 PageSpeed Insights 时,它仍然显示

在静态资源的 HTTP 标头中设置过期日期或最长期限会指示浏览器从本地磁盘而不是通过网络加载以前下载的资源。

但是所有的建议都是外部图片。我正在使用 Amazon 的 S3 外部托管图像(链接到直接 URL,如

有没有办法可以为这些外部图像“利用浏览器缓存”?

提前致谢。

安迪

【问题讨论】:

  • 您应该提供您目前所取得的成就,以便我们给出正确的建议。
  • 抱歉,如果我看起来不够具体...更多的是我所做的已经做到了,所以所有图像都完美地在本地缓存,但其他地方的图像却没有。下面有人指出我错过了一个明显的点,即我无法控制另一个站点的缓存,所以我必须在 S3 本身内完成。

标签: html caching iis-7.5 pagespeed


【解决方案1】:

是的,使用 Amazon S3,您仍然可以设置存储在存储桶中的对象的 Expires 标头。

你必须在存储对象的时候设置这个头,所以有两种方法:

  • 以编程方式使用 API(使用 PUT 请求设置 Expiry 标头)
  • 在您用于上传对象的存储桶浏览器中

如果你使用 API,你可以做类似的事情

PUT /ObjectName HTTP/1.1
Host: BucketName.s3.amazonaws.com
Date: date
Authorization: authorization-string
Expires: expiry-date

http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectPUT.html

对于第二种情况,这个链接可能会有所帮助:http://www.newvem.com/how-to-add-caching-headers-to-your-objects-using-amazon-s3/

希望这会有所帮助。

【讨论】:

  • 非常感谢。我知道这听起来很愚蠢,但我没想到我必须将它缓存在 S3 服务器上。现在听起来真的很明显!
【解决方案2】:

对于 S3 上的单个图像,您可以右键单击存储桶中的图像,转到属性并选择元数据。

add Key: Cache-Control  and Value: max-age=604800 (this is for 7 days)

这对我有用。但是如果你想批量编辑它们,我想你必须尝试命令行。如果您从命令行执行,根据我的理解,您需要再次复制图像以启用最大年龄更改来处理图像。

【讨论】:

    【解决方案3】:

    你试过了吗:

    ExpiresActive On
    ExpiresDefault A0    
    <FilesMatch "\.(gif|jpg|jpeg|png|swf)$">
        ExpiresDefault A3024000
        Header append Cache-Control "public"
        </FilesMatch>
    

    在您的 .htaccess 文件中,希望这会有所帮助。

    【讨论】:

    • 问题的作者说他们使用的 IIS 主要使用 Web.config 文件进行配置,可能不是 .htaccess 文件(除非使用像 Helicon Ape 这样的东西)。
    • 感谢您的回复,但正如汤姆所说,这个项目属于微软的世界。
    猜你喜欢
    • 2014-10-18
    • 1970-01-01
    • 1970-01-01
    • 2012-10-13
    • 1970-01-01
    • 2011-10-15
    相关资源
    最近更新 更多