Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Amazon s3 过期标头最大值_Amazon S3_Http Headers - Fatal编程技术网

Amazon s3 过期标头最大值

Amazon s3 过期标头最大值,amazon-s3,http-headers,Amazon S3,Http Headers,我在S3存储桶中有数百万个图像文件,我知道它们永远不会改变。 为了优化请求,我决定在文件中添加一个expires头(如下所述:) 将标题添加到所有文件的过程既长又昂贵,因此我不想重复。但是,Http Rfc建议在将来将Expires标头的最大过期日期设置为一年: …这意味着我必须在一年内更新标题 我的问题是: 我是否可以将标题值设置为一个非常远的日期(例如:01-01-2020)并与RFC建议相反?这样做的风险是什么 是否有另一种解决方案可以告诉请求我的文件的客户端无限期缓存它们,而不必更新我

我在S3存储桶中有数百万个图像文件,我知道它们永远不会改变。 为了优化请求,我决定在文件中添加一个expires头(如下所述:)

将标题添加到所有文件的过程既长又昂贵,因此我不想重复。但是,Http Rfc建议在将来将Expires标头的最大过期日期设置为一年:

…这意味着我必须在一年内更新标题

我的问题是:

我是否可以将标题值设置为一个非常远的日期(例如:01-01-2020)并与RFC建议相反?这样做的风险是什么


是否有另一种解决方案可以告诉请求我的文件的客户端无限期缓存它们,而不必更新我的amazon S3存储?

您可以将头值设置为2038年1月19日左右的最大值(最大32位时间戳)。 一段时间以来,谷歌一直在跟踪cookies过期时间

这样做的唯一风险是,如果有一天,出于某种原因,您决定更改图像(或注意到一个或多个图像有问题),您的客户将不会下载新版本。你决定是否值得冒险


除此之外,我没有发现任何潜在的问题。

您还可以设置更现代的标题:

Cache-Control: max-age=31536000, public

每个用户代理在加载每个图像时,都愿意在请求新副本之前将其缓存一整年。(大整数是365×24×60×60秒。)如果仍然有浏览器不理解缓存控制,它们可能会在图像的生命周期内逐渐消失

好吧,这是一个好主意。如果服务器不遵守任何“应该”,那么它最多是有条件地符合,而不是无条件地符合w.r.t.HTTP 1.1(RFC 2616,第1.2节)。所以从技术上来说没关系。我不知道S3是如何工作的,但是你不能只发送一个日期$(现在是+1年)而不是一个固定的日期吗?如果你的意思是,当客户端在S3上发出请求时,不可能动态设置头。所有标题都有“静态”值,更新它们需要对每个标题发出一个amazon PUT请求(实际上是一个CopyObjectRequest),当您的bucket中已经存储了数百万个文件时,这是一个难题。如果您将文件命名为其内容的MD5散列,则可以消除文件被更改的风险。然后,如果文件发生更改,文件名将不同,浏览器缓存将不适用,因为该文件名从未被缓存过。是的,实际上这就是我所做的(使用md5哈希进行命名)我对md5方法及其好处很好奇。它的最大缺点似乎是识别哪个图像是哪个(除非您远程管理所有这些)。例如,将文件命名为“myfile.[timestamp].png”有什么好处?另一种选择是附加一个被S3忽略的GET参数。任何时候你想确保人们看到的是最新版本,只需点击版本号。浏览器会将其视为不同的文件。例如myimage.png?v=2、myimage.png?v=3等