【发布时间】:2016-08-20 10:28:43
【问题描述】:
有没有什么方法可以通过发送 If-Modified-Since 标头将图像从 S3 加载到浏览器中?
它应该在浏览器和 S3 上默认启用,但测试表明每次刷新时都会加载图像。
【问题讨论】:
标签: amazon-web-services browser amazon-s3 http-headers browser-cache
有没有什么方法可以通过发送 If-Modified-Since 标头将图像从 S3 加载到浏览器中?
它应该在浏览器和 S3 上默认启用,但测试表明每次刷新时都会加载图像。
【问题讨论】:
标签: amazon-web-services browser amazon-s3 http-headers browser-cache
Amazon S3 已经支持 If-Modified-Since 标头,以及相关的 If-None-Match(它使用 ETag 而不是日期)。
因此,仅在图像发生更改时才加载图像的方法是实际使用If-Modified-Since,如果您有 Etag,则使用If-None-Match。但是,由于您正在谈论将其加载到浏览器中,因此大多数浏览器都会这样做,除非您做了一些时髦的事情来禁用浏览器缓存。
有关支持的标头的详细信息,请参阅http://docs.aws.amazon.com/AmazonS3/latest/API/RESTObjectGET.html#RESTObjectGET-requests-request-headers。
您是否遇到过浏览器仍在从 S3 加载图像(即使它们没有更改)的情况?如果是这样,您是否有更多详细信息,例如浏览器、版本和类似Chrome network tab HAR file 的内容?
默认情况下,它应该只适用于双方,没有自定义更改。我刚刚通过将新的 png 图像文件上传到 S3 进行了复制。在一个新的浏览器窗口中,我打开了开发工具并加载了网络选项卡。我确保未勾选“禁用缓存”,并勾选了“保留日志”(以在多次 F5 刷新时保留日志)。
我加载了图像,然后按 F5 重新加载了两次。结果是:
如您所见,第一次加载状态为 200,其他请求收到 304。
【讨论】:
Cache-Control : max-age=100 其中 max-age 是缓存它的秒数。如果您这样做,浏览器将立即使用其本地缓存中的图像,而不向 S3 发出任何请求,直到缓存的副本超过 100 年代。届时它会再次向 S3 发出If-Modified-Since 的请求,S3 会如上以 304 响应。然后浏览器会将其缓存 100 秒等。您可以根据需要设置 max-age。