使用在gsutil中配置了cors的PUT方法上传到谷歌云存储时,没有访问控制允许Origin



我们已经找到了整个网站来解决这个问题,但仍然没有运气!我们有一个网站,我们允许用户使用从后端生成的签名上传url将文件直接上传到谷歌云存储桶,我们使用PUT请求上传。每当用户上传文件时,chrome dev工具控制台中就会出现一个错误,显示

No 'Access-Control-Allow-Origin' header is present on the requested resource.

我们更新了bucket的cors设置如下:

$ gsutil cors get gs://{BUCKET_NAME}
[{"method": ["POST", "PUT", "GET", "HEAD", "OPTIONS"], "origin": ["*"], "responseHeader": ["*"]}]

但是,无论何时我们发送请求,响应标头中都不会返回Access Control Allow Origin标头。

注意:我们使用的是一个计算引擎实例,我们的域名由Cloudflare管理。

一些文章认为这可能是一个缓存问题,但我们已经面临这个问题好几个星期了,没有任何变化。

我听说PUT方法可能需要飞行前请求才能工作,我知道飞行前请求的理论部分,但我以前从未使用过它,也不知道该怎么办,我应该在发送主获取请求之前添加另一个请求,还是这一切都是自动的,都发生在幕后?

我会把我的评论作为答案发布,因为评论部分太长了。

在研究大量引用此错误的帖子时,我偶然发现了一个可能与您的错误有关的帖子,因为用户正在GCS上上传文件。

在这里,您还可以找到有关在GCS上启动可恢复上传的文件。

使用可恢复上传时,首先需要向启动它的端点,然后是1或更多(取决于数字块(PUT请求。当原点标头在第一次POST中未指定,最后一个区块将不包含允许CORS工作的头,浏览器将拒绝请求,即使它实际上是可以发出的(如果文件上传(。

我希望这些信息能有所帮助。

相关内容

  • 没有找到相关文章