Google Cloud Storage 传播 [英] Google Cloud Storage propagation
问题描述
对 Google Cloud Storage 中的文件所做的更改需要多长时间才能传播?
How long does it take for a change to a file in Google Cloud Storage to propagate?
我遇到了这个非常令人沮丧的问题,我更改了文件的内容并通过 gsutil 重新上传了它,但更改没有显示几个小时.有没有办法强制更改的文件立即传播所有内容?
I'm having this very frustrating problem where I change the contents of a file and re-upload it via gsutil, but the change doesn't show up for several hours. Is there a way to force a changed file to propagate everything immediately?
如果我在 Google Cloud Storage 控制台中查看文件,它会看到新文件,但如果我点击公共 URL,它是旧版本,在某些情况下,是 2 个版本之前.
If I look at the file in the Google Cloud Storage console, it sees the new file, but then if I hit the public URL it's an old version and in some cases, 2 versions ago.
有没有我没有设置的标题?
Is there a header that I'm not setting?
我试过 gsutil -h "Cache-Control: no-cache" cp -a public-read MyFile
并没有帮助,但也许旧文件需要在新的 no 之前过期-缓存版本接管?
I tried gsutil -h "Cache-Control: no-cache" cp -a public-read MyFile
and it doesn't help, but maybe the old file needs to expire before the new no-cache version takes over?
我对文件做了一个 curl -I 并取回:
I did a curl -I on the file and get this back:
HTTP/1.1 200 OK
Server: HTTP Upload Server Built on Dec 12 2012 15:53:08 (1355356388)
Expires: Fri, 21 Dec 2012 19:58:39 GMT
Date: Fri, 21 Dec 2012 18:58:39 GMT
Last-Modified: Fri, 21 Dec 2012 18:53:41 GMT
ETag: "66d820174d6de17a278b327e4c3e9b4e"
x-goog-sequence-number: 3
x-goog-generation: 1356116021512000
x-goog-metageneration: 1
Content-Type: application/octet-stream
Content-Language: en
Accept-Ranges: bytes
Content-Length: 160
Cache-Control: public, max-age=3600, no-transform
Age: 3449
这似乎表明它会在一个小时内到期,尽管没有缓存.
Which seems to indicate it will expire in an hour, despite the no-cache.
推荐答案
Google Cloud Storage 提供强大的数据一致性:一旦写入完成,从世界任何地方读取都将获得最新数据.
Google Cloud Storage provides strong data consistency: once a write completes, a read from anywhere in the world will get the most recent data.
但是,如果您启用缓存(默认情况下,对于任何公开可读的对象都是如此),该对象的读取可以看到与该对象上指定的 Cache-Control max-age 一样旧的对象版本.例如,如果您像这样上传文件:
However, if you enable caching (which by default is true for any publicly readable object), reads of that object can see a version of the object as old as the Cache-Control max-age specified on the object. If, for example, you uploaded the file like this:
gsutil cp -a public-read file gs://my_bucket/file
您可以看到 max-age 为 1 小时(3600 秒):
You can see that the max-age is 1 hour (3600 seconds):
gsutil ls -L gs://my_bucket/file
gs://my_bucket/file:
Creation time: Fri, 21 Dec 2012 19:59:57 GMT
Cache-Control: public, max-age=3600, no-transform
Content-Length: 1065
Content-Type: text/plain
ETag: eb3fb83beedf1efffe5b8e32e8d6a65a
...
如果你想阻止一个公开可读的对象被缓存,你可以这样做:
If you want to prevent a publicly readable object from being cached you could do:
gsutil setmeta -h Cache-Control:no-cache gs://my_bucket/file
或者,您可以在对象上设置更短的 max-age:
Alternatively, you could set a shorter max-age on the object:
gsutil setmeta -h 'Cache-Control:public, max-age=600, no-transform'
Mike Schwartz,Google 云存储团队
Mike Schwartz, Google Cloud Storage team
这篇关于Google Cloud Storage 传播的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!