仅当应用程序托管在Firebase中时,CORS策略才会阻止请求

仅当应用程序托管在Firebase中时,CORS策略才会阻止请求,firebase,cors,discord,endpoint,flutter-http,Firebase,Cors,Discord,Endpoint,Flutter Http,当用户提交联系人表单时,我的Flitter web应用程序需要调用API。该API是discord bot的API,它继续在我的discord服务器上的特定通道中发布消息。此设置适用于使用相同依赖项和相同生产环境(Firebase主机)的其他两个应用程序,但在该特定应用程序上会引发以下错误: 访问位于的XMLHttpRequest 'https://discordapp.com/api/channels/689799838509957177/messages“从 起源'https://auton

当用户提交联系人表单时,我的Flitter web应用程序需要调用API。该API是discord bot的API,它继续在我的discord服务器上的特定通道中发布消息。此设置适用于使用相同依赖项和相同生产环境(Firebase主机)的其他两个应用程序,但在该特定应用程序上会引发以下错误:

访问位于的XMLHttpRequest 'https://discordapp.com/api/channels/689799838509957177/messages“从 起源'https://autonet.tk'已被CORS策略阻止:响应 飞行前请求未通过访问控制检查:否 “Access Control Allow Origin”标头出现在请求的服务器上 资源

如果我在请求中添加头
'Access-Control-Allow-Origin':'*'
,我只会得到一个
XMLHttpRequest错误

我的代码:

import 'package:http/http.dart' as http;
var resp = await http.post(
      "https://discordapp.com/api/channels/689799838509957177/messages",
      headers: {
        'Authorization': "Bot " + botToken,
      },
      body: {
        "content": "NEW MESSAGE: " + body
      });
更难对根本原因进行三角测量的原因是,这在我的本地机器上运行良好。只有当我将应用程序部署到Firebase主机上时,我才会出现CORS错误。
另一件值得注意的事情是,在Discord方面,我不需要进行任何配置来接受其他两个使用相同代码工作正常的web应用程序的传入请求。(没有允许的主机列表)。

'Access-Control-Allow-Origin'它是一个头,必须在响应中,而不是在请求中。有关更多信息,我建议您阅读以下内容:

编辑: 经过一个小的研究,我认为你调用了错误的端点。这就是为什么响应没有附加正确的标题。 终点是:

https://discord.com/api

有关更多信息,请再次查看:

:它在本地计算机上工作,相同的代码(具有相同的api端点)在不同的应用程序中工作。响应中也不应该包含标题。浏览器正在阻止请求发出。它甚至在你链接的另一个问题中这样说。请阅读此链接。该标头必须在响应中:。这是一种用于避免从未经授权的域执行请求的策略。如果您像我建议的那样尝试更改端点,但错误仍然存在,则可能需要在discord api中授权应用程序的域