Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 谷歌云CDN开始忽略存储桶的查询字符串_Google Cloud Platform_Google Cloud Storage_Google Cloud Cdn - Fatal编程技术网

Google cloud platform 谷歌云CDN开始忽略存储桶的查询字符串

Google cloud platform 谷歌云CDN开始忽略存储桶的查询字符串,google-cloud-platform,google-cloud-storage,google-cloud-cdn,Google Cloud Platform,Google Cloud Storage,Google Cloud Cdn,几个月前,为存储桶激活了云CDN。我们的存储数据通过后端定期更改。因此,为了使缓存版本无效,我们在提供给客户端的url中添加了一个带有changedDate的查询参数 那时候这很管用 在过去几个月(可能是几周)的某个时候,谷歌似乎改变了这一点,现在它忽略了用于缓存存储桶的查询字符串 第一部分:有人知道为什么会改变,为什么没有人会改变 通知了吗 第二部分:如何使特定对象的缓存无效 在存储桶中,不发送缓存失效请求 (你不应该)每次 我不喜欢每次上传内容时删除旧文件并上传文件名更改的新文件的想法

几个月前,为存储桶激活了云CDN。我们的存储数据通过后端定期更改。因此,为了使缓存版本无效,我们在提供给客户端的url中添加了一个带有
changedDate
的查询参数

那时候这很管用

在过去几个月(可能是几周)的某个时候,谷歌似乎改变了这一点,现在它忽略了用于缓存存储桶的查询字符串

  • 第一部分:有人知道为什么会改变,为什么没有人会改变 通知了吗
  • 第二部分:如何使特定对象的缓存无效 在存储桶中,不发送缓存失效请求 (你不应该)每次
我不喜欢每次上传内容时删除旧文件并上传文件名更改的新文件的想法

编辑: 澄清一下:官方文档(cloud.google.com/cdn/docs/caching)已经声明他们现在忽略了存储桶的查询字符串:


对于后端bucket,缓存键由URI组成,但不包含query>字符串。因此,和是等价的


如官方文档所述,对于后端bucket,缓存键由不带查询字符串的URI组成。bucket没有计算查询字符串,但CDN仍然应该这样做。我可以重现同样的场景,目前仍然可以使用查询字符串作为缓存buster

改变的原因似乎是旧的行为导致了缓存机会的丢失、更高的成本和更高的延迟。目前唯一推荐的解决方法是通过将版本合并到对象名称中(对于您的情况,这似乎不是有效的选项)或使用缓存失效来创建新对象

要使特定对象的缓存无效,需要使用特定查询。也许一个允许在特定时间内缓存此类对象的缓存控制头可能是您的解决方法。云CDN缓存的过期时间由“缓存控制:s-maxage”、“缓存控制:max age”和/或Expires标头定义



我们也受到了影响。在联系谷歌支持后,他们确认这是一个永久性的改变。建议的解决方法是在对象名称中使用版本控制,或使用缓存失效。后者听起来有点奇怪,因为缓存失效状态为:

无效是为了在特殊情况下使用,而不是作为正常工作流程的一部分

根据,当使用后端bucket作为云CDN的来源时,请求URL中的查询字符串不包括在缓存密钥中:

例如,缓存密钥由URI组成,不包含协议、主机或查询字符串

也许使用查询字符串来标识缓存内容的不同版本不是GCP提倡的方法。但对于一些遗留问题,它必须是

所以,解决这个问题的一种方法是将后端bucket设置为一个(此处不启用CDN),然后使用(由后端服务支持的云CDN),它指向那个静态网站

对于后端服务,查询字符串是缓存键的一部分

对于,云CDN默认使用完整的请求URI作为缓存密钥


就这样。是的,这是乏味的,但工作

您为CDN
缓存键设置了什么?使用CDN配置编辑您的问题。本文档可能会帮助您:这正是重点:他们更改了它,因此您无法为存储桶设置它。如果向下滚动,则会在文档中显示。无效缓存不是一个选项。我们有几千件物品。其中大多数在数周/数月内没有变化。但每天都有一些变化。因此,每次触发自定义缓存失效不是一个选项。将对象另存为新文件会导致存储量大幅增加,因为某些客户端可能缓存了旧文件的URL,因此我们无法删除它们。将缓存时间减少到可接受的延迟(15分钟)基本上消除了CDN的好处,CDN可以将它们缓存几天……我知道旧的行为在某些用例中存在问题。但是这些问题通过使用自定义缓存键并从缓存键中删除查询字符串得到了解决。您可以在这里跟进:如果您不经常更改存储数据,那么使用失效是完全可以的。失效的缺点是每分钟只能启动一次失效。是的,原始海报会定期更改数据,我们在拥有数千名客户的多租户系统中也会这样做,并且后端会经常更新他们的数据。在这种情况下,无效是毫无疑问的。我们不得不暂时禁用云CDN,因为在对象名称中使用版本控制需要太多的更改,而且这不是一个很好的解决方案。我需要更多信息。这些链接确实解释了每个术语的含义,但没有描述这个特定场景。这是否意味着我必须编写一个服务器来代理bucket,或者有没有办法使用Google的云控制台来配置它?目前,我的负载平衡器直接指向整个域的bucket。