问题描述
尊敬的老年人, 我正在使用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