4

Google Cloud Storage 开发人员指南解释了如何设置 Cache-Control 标头,并解释了它们对 api 一致性行为的关键影响,但没有提及 Expires 标头,它们似乎也没有从 Cache-Control 配置继承。

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

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

通过以下方式向 Google Cloud Storage 存储桶(example-bucket)中的文档(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
4

2 回答 2

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 设置(即请求时间后一小时和请求时间后两小时)生成预期的时间戳。

于 2012-10-13T00:33:45.740 回答
2

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

Cache-Control: 300, no-transform

应该

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

当事情设置正确时,它们就会起作用。请参阅RFC 2616 (HTTP/1.1) 第 14.9 节(缓存控制)

于 2012-10-13T02:02:17.263 回答