我有一个奇怪的问题,似乎无法解决。我有一个Google Cloud Storage存储桶,我想在其中从网页上载文件。在后端(App Engine)中,我创建了可用于上传文件的签名URL。当我在Postman中使用带有签名的URL以及PUT请求和文件时,该文件已成功上传到我的存储桶中。
当我在网页上执行相同操作时,将变得很棘手。 我在网页中创建了以下代码:
var req = new XMLHttpRequest();
req.open("PUT", resp.url);
req.setRequestHeader("Content-Type", parameters.contentType);
req.onload = function(event) {
this.loadFileList();
}.bind(this);
req.send(this.$.fileInput.files[0]);
这给了我预检请求(选项)的CORS问题。经过一番阅读后,我想出了在Google Cloud Storage上设置CORS配置的方法。所以我设置了以下配置:
[
{
"origin": ["https://my-website"],
"responseHeader": ["Content-Type"],
"method": ["GET", "HEAD", "PUT", "OPTIONS", "POST"],
"maxAgeSeconds": 3600
}
]
当我将此配置放到Google Cloud Storage上时,我看到预检请求开始工作,但是实际请求仍然失败,并出现以下错误:
跨源请求被阻止:同源策略禁止阅读 位于的远程资源 https://storage.googleapis.com/[my-bucket].appspot.com/games/dev/game-[game]/game-pictures/[file].jpg?GoogleAccessId=[account]&Expires=[expires]&Signature=[signature]。 (原因:CORS标头“ Access-Control-Allow-Origin”缺失)。
(我替换了网址的某些部分,以使我不暴露任何有关我的存储桶的信息)
实际错误为真。实际请求的响应中缺少Access-Control-Allow-Origin,但预检请求的响应中存在。
那么,我应该在实际请求的响应中获得Access-Control-Allow-Origin吗?我为什么不明白呢?我该如何解决?
答案 0 :(得分:0)
请阅读以下文章,该文章清楚地说明了使用Java脚本进行调用时如何解决cors。 https://developers.google.com/api-client-library/javascript/features/cors