Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ajax Google云存储忽略访问控制源标题_Ajax_Cors_Cross Domain_Google Cloud Platform_Google Cloud Storage - Fatal编程技术网

Ajax Google云存储忽略访问控制源标题

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

我正试图通过AJAX从本地主机上的google云存储中获取文件。我已经做了以下工作:

通过gsutil为我的桶设置CORS:

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]“这没有帮助