代码之家  ›  专栏  ›  技术社区  ›  Andy Jones

利用浏览器缓存-外部图像

  •  2
  • Andy Jones  · 技术社区  · 11 年前

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

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

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

    <img src=“http://s3.amazon.com.......“/>。

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

    提前感谢。

    安迪

    3 回复  |  直到 11 年前
        1
  •  2
  •   user2073253 user2073253    11 年前

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

    存储对象时必须设置此标头,因此有两种方法:

    • 使用API编程(使用PUT请求设置Expiry标头)
    • 在用于上载对象的bucket浏览器中

    如果使用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/

    希望这有帮助。

        2
  •  2
  •   AmyG    8 年前

    对于S3上的单个图像,您可以右键单击bucket中的图像,转到财产并选择Metadata。

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

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

        3
  •  -1
  •   Jonid Bendo    11 年前

    您是否尝试过:

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

    在.htaccess文件中,希望这有帮助。