Google存储可恢复上传失败,并显示CORS错误

时间:2018-10-27 20:58:07

标签: cors google-cloud-storage access-control

我正在尝试:

  1. 在服务器端使用XML API或JSON API生成可恢复的上传URL-> URL生成正确,可以使用
  2. 将该URL返回浏览器,并使用JavaScript / jQuery强制将文件上传到该URL。
  3. 进行呼叫时,因为有CORS请求,所以

a)首先发送预检请求并返回响应200,该响应包括标头:具有正确主机名的access-control-allow-origin

b)接下来,将上传请求发送到Google存储设备,正确完成上传并获取响应(例如,包含带有上传详细信息的JSON)。

但是响应不包含标头:access-control-allow-origin,并且由于该浏览器抱怨:跨源请求被阻止:同源策略禁止读取https://www.googleapis.com/upload/storage/v1/b/test-bucket/o?uploadType=resumable&upload_id=AEnB2UoTmA9ul处的远程资源。 (原因:CORS标头“ Access-Control-Allow-Origin”缺失)。

为解决此问题,一些文章建议:

  • 在生成可恢复的上传URL时作为“ Origin”标头发送将进行实际上传的客户端的位置。我对JSON API和XML API都做到了。但还是一样
  • 配置存储桶以接受CORS请求->这是我的存储桶CORS配置:[{“方法”:[“ PUT”,“ GET”,“ OPTIONS”],“来源”:[“ *”]}]

1 个答案:

答案 0 :(得分:0)

是的,我已经解决了-问题是Java不允许发送/设置带有自定义值的Origin标头。 因此,即使我设置了Origin值-也未发送。

要解决此问题,必须在启动Java进程时配置sun.net.http.allowRestrictedHeaders = true。