【问题标题】:Google Cloud Storage - Direct upload with XMLHttpRequest causes "Access-Control-Allow-Origin"-errorGoogle Cloud Storage - 使用 XMLHttpRequest 直接上传会导致“Access-Control-Allow-Origin”错误
【发布时间】:2014-02-03 15:47:07
【问题描述】:

我的以下问题使用:Java、GWT、jQuery、App Engine (GAE)。

关于“Access-Control-Allow-Origin”标头有很多问题,但似乎没有什么是我想要的。

我正在尝试使用 POST Object 将文件上传到 Google Cloud Storage。如果我只是使用 html-form 来实际进行上传,这很好用。但是,一旦我尝试使用 XMLHttpRequest 发出完全相同的请求,就会收到错误消息“请求的资源上不存在'Access-Control-Allow-Origin'标头”。我遵循了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?这是因为我希望能够对我的文件上传到谷歌云存储 (GCS) 进行上传。我不确定我是否在某处犯了错误,或者在上传到 GCS 时是否有可能有上传进度。但据我了解,对此不应有任何限制,因为上传进度不是基于与 GCS 的通信(上传速度除外)。

我已经强行清理了我的缓存,但这并没有帮助! :(

有什么建议吗?

谢谢!

【问题讨论】:

    标签: google-app-engine gwt xmlhttprequest cors google-cloud-storage


    【解决方案1】:

    我真的不喜欢回答自己的问题,因为在我提问之前似乎我没有做足够的研究。但我确实做到了,在我问这个问题之前,我确实尝试了 1.5 天。

    问题出在 CORS xml 文件中的一行:

    <ResponseHeader>x-goog-meta-foo1</ResponseHeader>
    

    应替换为:

    <ResponseHeader>*</ResponseHeader>
    

    我真的不认为这会产生任何影响,因为我认为“Access-Control-Allow-Origin”标头将作为默认发送,因为这就是我进行此设置的原因,而 docs 没有不要提任何关于它的事情。我确实有点理解 x-goog-meta-foo1 是一个例子,但并不是说如果使用它会破坏设置(谷歌,请更新文档)。

    【讨论】:

    • 回答你自己的问题是可以接受的..只要你先做研究..你做了.. :) 所以不用担心..
    • +1 - 回答你自己的问题没问题,将来可能会对其他人有所帮助
    • 这让我发疯了将近 2 天。你拯救了我的一天。谢谢。
    • 我要感谢我年轻的自己的回答,两年后再次帮助我解决同样的问题! :D
    猜你喜欢
    • 2016-12-09
    • 1970-01-01
    • 2014-03-05
    • 2018-11-08
    • 1970-01-01
    • 1970-01-01
    • 2014-10-04
    • 2014-10-08
    • 2023-03-13
    相关资源
    最近更新 更多