如何在Google云端存储上正确设置过期标题?

时间:2012-10-12 23:39:15

标签: google-cloud-storage

Google Cloud Storage Developer Guide解释了如何设置Cache-Control标头,并解释了它们对api的一致性行为的重要影响,但是没有提到Expires标头,也没有看到它们从Cache-继承 - 控制配置。

Expires标头似乎始终等于请求时间加1年,无论Cache-Control设置如何,例如。

$ gsutil setmeta -h "Cache-Control:300" gs://example-bucket/doc.html 

通过

向Google云端存储分区(示例存储桶)中的文档(doc.html)发出了请求
$ curl -I http://example-bucket.storage.googleapis.com/doc.html

产生了以下标题

HTTP/1.1 200 OK
Server: HTTP Upload Server Built on Oct 3 2012 16:52:30 (1349308350)
Date: Sat, 13 Oct 2012 00:51:13 GMT
Cache-Control: 300, no-transform
Expires: Sun, 13 Oct 2013 00:51:13 GMT
Last-Modified: Fri, 12 Oct 2012 20:08:41 GMT
ETag: "28fafe4213ae34c7d3ebf9ac5a6aade8"
x-goog-sequence-number: 82
x-goog-generation: 1347601001449082
x-goog-metageneration: 1
Content-Type: text/html
Accept-Ranges: bytes
Content-Length: 7069
Vary: Origin

2 个答案:

答案 0 :(得分:5)

不确定为什么你说Expires标题显示请求时间加1年。在您的示例中,Expires标头显示请求日期后一小时的时间戳,这是预期的。

我刚做了一个实验,我将对象的最大年龄设置为3600,然后通过此命令设置为7200:

gsutil setmeta "Cache-Control:max-age=7200" gs://marc-us/xyz.txt

然后我使用带有-D选项的gsutil cat命令检索对象,以查看请求/响应详细信息,如下所示:

gsutil -D cat gs://marc-us/xyz.txt

在两个实验中,Expires标头根据对象的max-age设置(即请求时间后一小时和请求时间后两小时)生成预期时间戳。

答案 1 :(得分:2)

看起来这是由格式错误的标头引起的。咄。

Cache-Control: 300, no-transform

应该是

Cache-Control: public, max-age=300, no-transform

当设置正确时,它们可以正常工作。请参阅RFC 2616 (HTTP/1.1) Section 14.9 (Cache-Control)