Ajax Google云存储忽略访问控制源标题
我正试图通过AJAX从本地主机上的google云存储中获取文件。我已经做了以下工作: 通过gsutil为我的桶设置CORS:Ajax Google云存储忽略访问控制源标题,ajax,cors,cross-domain,google-cloud-platform,google-cloud-storage,Ajax,Cors,Cross Domain,Google Cloud Platform,Google Cloud Storage,我正试图通过AJAX从本地主机上的google云存储中获取文件。我已经做了以下工作: 通过gsutil为我的桶设置CORS: gsutil cors set cors.json gs://my project 其中cors.json文件为: [ { "origin": [ "*" ], "responseHeader": ["Origin", "Accept", "X-Requested-With", "Authorization", "Content-T
gsutil cors set cors.json gs://my project
其中cors.json文件为:
[
{
"origin": [
"*"
],
"responseHeader": ["Origin", "Accept", "X-Requested-With", "Authorization", "Content-Type", "Content-Length", "Accept-Encoding", "X-CSRF-Token"],
"method": [
"GET",
"OPTIONS"
],
"maxAgeSeconds": 1
}
]
我已经用gsutil cors get gs://my project
然后,对于每个文件,我都在上传文件时通过node.js客户端库将其公开:
bucket.file(object.name).makePublic()
通过控制台和gsutil:
gsutil-m acl set-R-a public read gs://my project
然后在我的ajax请求中,我还发送头:
$.ajax({
method: "GET",
url: "https://googleapis.com/storage/v1/b/my-project/o?delimiter=audio",
headers: {
'Access-Control-Allow-Origin': '*'
},
crossDomain: true,
}).done((data) => {
console.log(data)
})
我仍然会收到一个cors错误:
对飞行前请求的响应未通过访问控制检查:否
“Access Control Allow Origin”标头出现在请求的服务器上
资源。因此,不允许使用源“”
进入
如何通过CORS?您使用的是“googleapis.com”而不是“www.googleapis.com”。添加“www”,你的代码就可以工作了
看起来您没有进行任何身份验证,因此您还需要确保您的bucket允许匿名用户列出对象(gsutil acl ch-g alluser:R gs://bucket name
将设置该选项)
接下来,对于匿名请求,最好添加一个API键参数,将请求与Google云项目关联起来。地面军事系统将允许完全匿名的请求,但如果请求过于频繁,可能会被阻止
最后,桶上的CORS策略只受XMLAPI的尊重。JSON API的端点为“www.googleapis.com”,它将很乐意响应跨源请求,而无需在bucket上设置任何特殊属性。这里是我的端点格式:“storage.googleapis.com/[bucket\u NAME]/[OBJECT\u NAME]”,这意味着将其更改为“www.storage.googleapis.com/[bucket\u NAME]/[OBJECT\u NAME]“这没有帮助