我的以下问题使用了:Java、GWT、jQuery、App Engine (GAE)。
关于“Access-Control-Allow-Origin”-header 有很多问题,但似乎没有什么是我想要的。
我正在尝试使用 POST Object 将文件上传到 Google Cloud Storage .如果我只是使用 html 表单实际进行上传,这就可以正常工作。但是,一旦我尝试使用 XMLHttpRequest 发出完全相同的请求,我就会收到错误消息“请求的资源上不存在‘Access-Control-Allow-Origin’ header ”。我关注了setup CORS for a bucket -指导。我的 CORS xml 文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<CorsConfig>
<Cors>
<Origins>
<Origin>*</Origin>
</Origins>
<Methods>
<Method>GET</Method>
<Method>POST</Method>
<Method>HEAD</Method>
<Method>DELETE</Method>
<Method>OPTIONS</Method>
</Methods>
<ResponseHeaders>
<ResponseHeader>x-goog-meta-foo1</ResponseHeader>
</ResponseHeaders>
<MaxAgeSec>1800</MaxAgeSec>
</Cors>
</CorsConfig>
那么我为什么要使用 XMLHttpRequest?这是因为我希望能够在将文件上传到 Google Cloud Storage (GCS) 时进行上传。我不确定我是否在某处犯了一些错误,或者在上传到 GCS 时是否有上传进度。但据我所知,这应该没有限制,因为上传进度不是基于与 GCS 的通信(上传速度除外)。
我已经强行清理了我的缓存,但这并没有帮助! :(
有什么建议吗?
谢谢!
最佳答案
我真的不喜欢回答自己的问题,因为在我提问之前似乎没有做足够的研究。但我真的做到了,在我问这个问题之前,我确实尝试了 1.5 天的一切。
问题出在 CORS xml 文件中的一行:
<ResponseHeader>x-goog-meta-foo1</ResponseHeader>
应替换为:
<ResponseHeader>*</ResponseHeader>
我真的不认为这会有什么不同,因为我假设“Access-Control-Allow-Origin”-header 将作为默认发送,因为这就是我进行此设置和 docs 的原因没有提及任何相关内容。我确实有点明白 x-goog-meta-foo1
是一个例子,但并不是说如果使用它会破坏设置(谷歌,请更新文档)。
关于google-app-engine - Google Cloud Storage - 使用 XMLHttpRequest 直接上传会导致 "Access-Control-Allow-Origin"-error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21132945/