当前位置: 首页 > 知识库问答 >
问题:

尽管我在服务器上设置了Access-Control-Allow-Origin,但Google Firebase函数的CORS错误

公冶麒
2023-03-14

当我在localhost上运行react应用程序时,浏览器上出现以下错误,它向Google Firebase函数发送了一个有效负载:

CORS策略阻止了在“https:// .cloudfunctions.net/ ”从原始“http://localhost:3000”进行取数的访问:请求的资源上没有“access-control-allow-origin”标头。如果一个不透明的响应满足您的需要,请将请求的模式设置为“no-cors”以获取禁用CORS的资源。

我的Google Firebase函数有以下代码:

exports.<myfunction> = functions.https.onRequest(async (req, res) => {

  res.set('Access-Control-Allow-Origin', 'http://localhost:3000');
  res.set('Access-Control-Allow-Headers', '*');

  console.log(req.body); 

  res.end()
});

我在我的firebase functions console日志中得到的错误如下:

SyntaxError:JSON中在位置0处的意外令牌#(JSON.parse()在createStrictSyntaxError(/worker/node_modules/body-parser/lib/types/JSON.js:157:10)在parse(/worker/node_modules/body-parser/lib/types/JSON.js:83:15)在/worker/node_modules/body-parser/lib/types/JSON.js:121:18在invokeCallback

触发该函数的客户端代码如下:

submit(name) {

    fetch('https://< myproject >.cloudfunctions.net/< my function >', {method: 'POST', headers: {"Content-Type": "application/json", 
      },
      body: 'mytoken'
    }).then(result => {console.log(result)}); 
  }

而且,就在几分钟和几天前,一切都很顺利!就好像这个错误是从哪儿突然冒出来的。

共有1个答案

宗政海
2023-03-14

您的提取请求发送的是application/json的内容类型头,但主体是'mytoken',它不是有效的JSON。请尝试发送类似{“token”:“mytoken”}的内容。

编辑:另外,由于您正在设置Content-Type头,您可能会触发CORS预飞行选项请求,并且可能希望使用CORS中间件来处理它。

编辑2:错误的来源确实是发送的是一个纯字符串而不是JSON对象(由于content-type设置为application/JSON这一事实,JSON对象是必需的)。但是,还有一个额外的bug后遗症,那就是JSON有效负载需要加强。相应地,“body”的以下代码是使所有事情成功运行的原因:

body: JSON.stringify({token: 'mytoken'})
 类似资料:
  • XMLHttpRequest无法加载http://localhost:8080/nobelgrid/api/users/create/。请求的资源上没有“访问-控制-允许-来源”标头。因此,不允许访问源'http://localhost:63342'。响应的HTTP状态代码为500。 谁能帮帮我吗? 更新: 但我还有一个错误。我会做另一个问题,因为我认为这是一个不同的论点。 提前感谢!

  • Access-Control-Allow-Origin响应 header 指示是否该响应可以与具有给定资源共享原点。 Header type Response header Forbidden header name no 语法 Access-Control-Allow-Origin: *Access-Control-Allow-Origin: <origin> 指令 * 对于没有凭据的请求,服务

  • Response.AddHeader(“Access-Control-Allow-Origin”,“*”)是如何实现的;行设置多个标题时,包括,但没有当我删除它?

  • 我从ASP.NET表单中调用这个函数,在调用Ajax时在firebug控制台中得到以下错误。 跨源请求被阻止:同一源策略不允许读取http://anotherdomain/test.json上的远程资源。(原因:CORS标头“Access-Control-Allow-Origin”丢失)。 我做了其他的方法,但仍然找不到解决办法。 注意:我没有服务器权限进行服务器端(API/URL)更改。

  • 我有一个网络服务,比如: 在链接中: 我正在尝试通过链接中的AlFresco获取此Web服务的响应:。我现在有不同的端口(当我有相同的端口时,这很好地工作),所以,使用不同的端口,我在AlFresco中得到错误: 跨源请求被阻止:同一源策略不允许在以下位置读取远程资源:http://localhost:8081/ChangesPDF/Changes?...(原因:缺少CORS的“访问控制允许原点”

  • 我尝试了几种方法来设置CORS头: null Chrome调试器在控制台中显示了以下内容: XMLHttpRequest无法加载http://localhost:8080/hop-backend/rest/shop/listhotelslandingPage。请求的资源上没有“访问-控制-允许-来源”标头。因此,不允许访问源'http://localhost:9000'。响应的HTTP状态代码为5