设置自定义Google Storage Bucket宽的最大寿命标头

问题描述

尊敬的老年人, 我正在使用Google存储桶来存储网站的静态内容。我希望将这些内容缓存在CDN中,这就是为什么我将存储桶公开的原因,这导致将https标头的Cache-control设置为public,认将max-age设置为3600。 我想将所有将来要存储在存储桶中的对象的max-age设置为更高的值。 我进行了很多搜索,但无法在线找到任何解决方案。 如果有任何办法,请指导我。

解决方法

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

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

使用我的一个公共存储桶,我已将Cache-Control编辑为具有值public,max-age=5000,并在请求对象时将标头设置为正确的值。看一下this guide,以了解如何修改元数据。


this answer中所述,为了在存储桶的将来对象中自动设置正确的标头,可以使用使用storage trigger finalize的Cloud Function,以便在获取对象时运行上传/覆盖并更改对象的元数据。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...