首页 > 解决方案 > 设置自定义 Google Storage Bucket 范围的 max-age 标头

问题描述

尊敬的前辈,我正在使用谷歌存储桶来存储我网站的静态内容。我希望将此内容缓存在 CDN 中,这就是我将存储桶公开的原因,这导致默认情况下将 https 标头 Cache-control 设置为 public 和 max-age 设置为 3600。我想为将上传到存储桶中的所有未来对象设置 max-age 为更高的值。我搜索了很多,但在网上找不到任何解决方案。如果有任何方法可以做到这一点,请指导我。

标签: google-cloud-storagecache-controlmax-agegoogle-bucket

解决方案


文档中所述,可以设置访问对象时返回的标头来修改与其关联的元数据。元数据有两类,一类是固定的,另一类是自定义的。元数据/标头 Cache-Control 是固定键元数据之一。

在有关Cache-Control的部分中,据说我们可以修改所述标头以修改缓存设置。如果未提供,则该值设置为public, max-age=3600

使用我的一个公共存储桶,我编辑了 Cache-Control 以获得该值public, max-age=5000,并且在请求对象时,标头设置为正确的值。查看本指南以了解如何修改元数据。


本答案所述,为了在存储桶的未来对象中自动设置正确的标头,可以使用使用存储触发器 finalize的云函数,以便在对象被上传/覆盖并更改对象的元数据时运行.

from google.cloud import storage

CACHE_CONTROL = "public, max-age=3159200"

def set_cache_control_private(data, context):
    print('Setting Cache-Control to {} for: gs://{}/{}'.format(CACHE_CONTROL, data['bucket'], data['name']))
    storage_client = storage.Client()
    bucket = storage_client.get_bucket(data['bucket'])
    blob = bucket.get_blob(data['name'])
    blob.cache_control = CACHE_CONTROL
    blob.patch()

请注意代码本身与其他答案几乎相同,但将 Cache-Control 设置为我们决定的新值。

此内容还需要该requirements.txt文件:

google-cloud-storage

推荐阅读