相关疑难解决方法(0)

没有'Access-Control-Allow-Origin'标题,可恢复上传

我们正在通过我们的App Engine应用程序中的云存储JSON API生成可恢复的上传URL,这些应用程序可用于移动设备和Web应用程序.在Web应用程序中,使用XmlHttpRequest上传具有可恢复上传URL的文件,我们收到以下错误:

XMLHttpRequest无法加载https://www.googleapis.com/upload/storage/v1beta2/b/ ...请求的资源上没有"Access-Control-Allow-Origin"标头.因此,不允许来源" https://ourapp.appspot.com "访问.

在Chrome开发人员工具中,网络日志显示第一个OPTIONS请求,其中包含相应的"Origin"请求标头和"Access-Control-Allow-Origin"响应标头,但后面提到的PUT请求失败.

我们的桶上的cors xml看起来像这样:

<?xml version="1.0" encoding="UTF-8"?>
    <CorsConfig>
      <Cors>
        <Origins>
          <Origin>*</Origin>
        </Origins>
        <Methods>
          <Method>PUT</Method>
          <Method>GET</Method>
          <Method>POST</Method>
          <Method>HEAD</Method>
          <Method>DELETE</Method>
          <Method>OPTIONS</Method>
        </Methods>
        <ResponseHeaders>
          <ResponseHeader>*</ResponseHeader>
        </ResponseHeaders>
        <MaxAgeSec>1800</MaxAgeSec>
      </Cors>
    </CorsConfig>
Run Code Online (Sandbox Code Playgroud)

欢迎任何建议.

谢谢.

google-app-engine xmlhttprequest google-api google-cloud-storage

20
推荐指数
2
解决办法
5444
查看次数

GCS可恢复上传的PUT响应标头中缺少“ access-control-allow-origin”

我目前正在尝试实现从网络浏览器到Google云存储桶的可恢复上传。我正在使用记录的程序,如下所示:

1)通过从Web服务器发送到GCS的http POST启动可恢复的上传。

2)将返回的上传网址发送到浏览器,并通过XmlHttpRequest发出Http PUT以上传数据。

直到最后一切似乎都运作良好。也就是说,浏览器首先发送OPTIONS预检请求,该请求返回OK(200),然后发送一个PUT请求,在此期间上传文件。PUT还返回OK(200),但标头中不包含Access-Control-Allow-Origin。然后,这将导致XmlHttpRequest触发错误。

我不知道为什么不返回此标头字段。我认为从GCS端上传成功,因为文件实际上出现在存储桶中。但是,浏览器认为发生了错误。这是直接从Chrome开发者控制台获取的HTTP记录。

选项要求

请求URL: “https://开头” BUCKET.storage-upload.googleapis.com/1485967698353.e57?upload_id=AEnB2UohgRBG272hoHLZ9i-wLeTn45KKoMjTDEQGu-GoUl-1JQf5_sOnf7IjtpN0wuYzHgzEu3Qi9tpVHGrru--cwY7q2jNQdw
请求方法:OPTIONS
状态代码:200
远程地址:[2607:f8b0 :4009:811 :: 2010]:443

选项响应头

access-control-allow-credentials:true
access-control-allow-headers:content-range,content-type,x-upload-content-type
access-control-allow-methods:PUT
access-control-allow-origin:http ://www.example.com
alt-svc:quic =“:443”; ma = 2592000; v =“ 35,34”
content-length:0
content-type:text / html; charset = UTF-
8日期
:2017年2月1日星期三16:48:18 GMT 服务器:UploadServer
状态:200

PUT请求

请求URL: “https:”开头// BUCKET.storage-upload.googleapis.com/1485967698353.e57?upload_id=AEnB2UohgRBG272hoHLZ9i-wLeTn45KKoMjTDEQGu-GoUl-1JQf5_sOnf7IjtpN0wuYzHgzEu3Qi9tpVHGrru--cwY7q2jNQdw
请求方法:PUT
状态代码:200
远程地址:[2607:f8b0 :4009:811 :: 2010]:443

PUT响应标题

alt-svc:quic =“:443”; ma = 2592000; v =“ 35,34”
content-length:0
content-type:text / html; charset = UTF-
8日期
:2017年2月1日,星期三16:48:19 GMT etag:“ c6f30652db5986aec4c00e80a9d00f25”
服务器:UploadServer
状态:200个
不同:来源
x-goog代:1485967699029000
x-goog-hash:md5 …

google-cloud-storage

6
推荐指数
1
解决办法
998
查看次数