当前位置: 首页 > 面试题库 >

Google Cloud Storage忽略访问控制来源标头

孟乐逸
2023-03-14
问题内容

我正在尝试通过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”标头。因此,不允许访问源’
http:// localhost:3000 ‘。

我如何通过CORS?


问题答案:

您使用的是“ googleapis.com”,而不是“ www.googleapis.com”。添加“ www”,您的代码即可使用。

看来您没有进行任何身份验证,因此还需要确保您的存储桶允许匿名用户列出对象(gsutil acl ch -g allUsers:R gs://bucket- name将对此进行设置)。

接下来,对于匿名请求,最好添加一个API密钥参数,以将请求与您的Google
Cloud项目相关联。GCS将允许完全匿名的请求,但是如果它们变得过于频繁,则可能会被阻止。

最后,存储桶上的CORS策略仅受XML API的尊重。JSON API(端点为“
www.googleapis.com”的API)将很高兴地响应跨域请求,而无需在存储桶上设置任何特殊属性。



 类似资料:
  • 我正在尝试将webUntis(文档)API用于学校项目。现在,我只是尝试建立与API的任何类型的连接。 此代码产生以下错误消息: 已阻止跨源请求:同一源策略禁止读取位于的外部资源https://api.webuntis.dk/api/status(原因:缺少CORS标头“访问控制允许来源”)。 这个问题可能如何解决?也许我的API密钥是错误的? 免责声明:错误消息是从德语翻译过来的。

  • 错误:我在Firefox中得到以下内容:外国站点查询被阻止:同源策略不允许读取远程资源http:// localhost:8080 / api / v1 / post /。(原因:“访问控制-允许-源”CORS 标头不存在) 我已经花了几个小时允许CORS与我的Spring Boot服务器通信,以使我的REACT UI与服务器通信。关于堆栈溢出,有许多措辞类似的问题,但建议的解决方案中没有一个解决

  • 问题内容: 我试图使CORS请求正常工作。使用以下JS代码,我得到此错误: 这是JS代码: 当我使用chrome的devtools查看网络时,我发现确实没有标题。但是,当我手动加载该网站时,它就存在了! 我使用以下代码设置标题: 希望能有所帮助! 问题答案: 它说这意味着您的服务器应用程序需要调整以接受跨源请求。由于安全原因,默认情况下跨源请求不起作用。您需要启用它们。 对于django,有一个维

  • 问题内容: Web编程有些新知识,对此有些困惑。我有一个提供网站的基本express.js web服务器。我想将一个Gameid交给一个函数,并让其使用其Web API从Steam抓取成就信息,应该使用以下REST API调用来支持该信息: https://developer.valvesoftware.com/wiki/Steam_Web_API#GetGlobalAchievementPerc

  • 问题内容: 我看到以下错误: 使用此代码: 是什么原因引起的,如何解决? 问题答案: 在当前域之外发出ajax请求时,Javascript是受限制的。 例1:您的域名为example.com,并且您想向test.com提出请求=>您不能。 例2:您的域名是example.com,并且您想向inner.example.com发送请求,但是您不能。 例3:您的域名为example.com:80,并且您

  • 我有一个网站,有一个单独的静态文件子域。我发现我需要设置标题,以使某些AJAX功能正常工作,特别是字体。我希望能够从访问静态子域进行测试,以及从子域访问静态子域。简单的解决方案是。我的服务器使用nginx。 您可能不想在响应标题中使用通配符作为,主要原因是什么?