我们正在通过我们的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
我目前正在尝试实现从网络浏览器到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 …