如何在使用 javascript fetch 函数时设置公共 Google Cloud Storage 存储桶的 CORS 以避免错误?

Posted

技术标签:

【中文标题】如何在使用 javascript fetch 函数时设置公共 Google Cloud Storage 存储桶的 CORS 以避免错误?【英文标题】:How to set CORS of a public Google Cloud Storage buckets to avoid errors when using javascript fetch function? 【发布时间】:2020-02-13 09:11:30 【问题描述】:

当我运行以下代码来获取存储在我的公共 GCS 存储桶中的数据(.json 格式)时,出现了问题。

async function getData() 
  const carsDataReq = await fetch(...);
  const carsData = await carsDataReq.json();  
  const cleaned = carsData.map(car => (
    mpg: car.Miles_per_Gallon,
    horsepower: car.Horsepower,
  ))
  .filter(car => (car.mpg != null && car.horsepower != null));
  console.log(cleaned);
  return cleaned;

错误信息如下所示:

Access to fetch at '...' from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource. If an opaque response serves your needs, set the request's mode to 'no-cors' to fetch the resource with CORS disabled.

我尝试通过以下 .json 文件设置存储桶的 CORS:

[                                                                                                                     
    
      "origin": ["*"],
      "responseHeader": ["Content-Type"],
      "method": ["GET", "HEAD", "DELETE"],
      "maxAgeSeconds": 86400
    
 ]

但错误仍然出现。 如何解决?

【问题讨论】:

请查看this question。它可能会解决您的问题。让我知道这是否有帮助。 将其添加为包含更多详细信息的答案。请接受答案,让其他成员也能看到。 【参考方案1】:

发布我的评论作为答案,让其他用户看到。

错误

CORS 已阻止访问从源“null”在“...”处获取 政策:没有“Access-Control-Allow-Origin”标头出现在 请求的资源。如果不透明的响应满足您的需求,请将 请求模式为“no-cors”以获取禁用 CORS 的资源。

这意味着托管资源的服务器需要启用 CORS。您可以在客户端执行的操作是将 fetch 模式设置为 CORS。

fetch(request, mode: 'cors');

感谢this post 提供的所有信息。查看更多详情。

【讨论】:

以上是关于如何在使用 javascript fetch 函数时设置公共 Google Cloud Storage 存储桶的 CORS 以避免错误?的主要内容,如果未能解决你的问题,请参考以下文章

如何在fetch then / response函数中访问请求对象

javascript的fetch函数?

如何使用 fetch 在 javascript 中获取 php 错误消息

在函数中使用 fetch() 会导致“未定义输出”

如何使用“Fetch API”在 javascript 和 c# 之间传递数据?

如何在 JavaScript 中将 Ajax 转换为 Fetch API?