【问题标题】:Google cloud storage modifies javascript file based on request location谷歌云存储根据请求位置修改 javascript 文件
【发布时间】:2018-07-06 17:24:17
【问题描述】:

我正在使用 Google Cloud Storage 区域存储桶来托管我的 javascript 文件。以前它们在全球范围内运行良好,但现在它们仅在从区域 IP(南美)访问时才能运行,并且国际 IP 会获得稍微修改的 javascript 文件。

bucket没有版本控制,文件是hash的,所以只上传了一次。

可以通过此链接访问相关文件:https://www.googleapis.com/download/storage/v1/b/hassets/o/all%2FViewer-7315d2224c220a45ad8e.js?generation=1530894418059107&alt=media

当通过南美IP(bucket所在的位置)访问时,会出现一次如下字符串:closeAfter(500)()

但是当在别处访问时,这个字符串将被修改为:closeAfter(500)(,"gl"),从而破坏了脚本。

这应该发生吗?有什么办法可以解决吗?

【问题讨论】:

  • 这听起来很典型,但是,您可以尝试在隐身窗口中访问吗?另外,这个问题是什么时候开始的?你对GCS做了什么改变吗? (桶配置等)。另外,您有多少个地区有这个问题?
  • 嗨,我终于解决了这个问题,我用来测试的所有网络代理似乎都出于某种原因将字符添加到 javascript 文件中,而我的客户遇到了问题在美国是因为一个不相关的 Safari 问题。
  • 感谢您的评论!如果可能的话(当然,跳过任何可能发生的私人信息/步骤),你能把这个作为答案发布吗?这看起来是个有趣的问题。

标签: google-cloud-platform google-cloud-storage


【解决方案1】:

默认情况下,匿名可读的 GCS 对象有一个缓存策略,允许 Google 和其他中介缓存内容长达一个小时。对于匿名可读对象,如果一个对象在过去一小时内被另一个同名对象覆盖,则很可能一个区域的用户可能会看到原始对象,而另一个区域的查看者可能会看到较新的对象。

我敢打赌,有人上传了第一个选项,至少下载了一次(将其加载到某处的缓存中),然后上传了第二个版本。无论对象是否启用了版本控制,都会发生这种情况。

请注意,如果 URL 中存在世代编号(在您的链接中存在),则不会发生这种情况。这是您看到问题的链接,还是您使用了“https://storage.googleapis.com/bucket_name/object_name.js”之类的链接?

【讨论】:

  • 感谢您的回复。该文件由服务器为每个应用程序版本上传(并且其哈希值存在于文件名中),它不是用户上传的文件。我没有在服务器上使用生成,但是即使具有生成编号的链接也会发生同样的问题。同样使用gsutil ls -a gs://hassets/all 仅显示文件的这一代。郑重声明,现在从巴西下载此链接(与一代)将不会有:closeAfter(500)(,"gl")
  • 来自北美,点击那个链接,我也没有。我猜还有别的事情正在发生。要么确实有更早的上传,要么正在发生其他事情,例如编辑您的 JavaScript 文件的网络浏览器扩展。
猜你喜欢
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
  • 2016-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-07-17
  • 1970-01-01
相关资源
最近更新 更多