【问题标题】:Request blocked by CORS policy only when app is hosted in Firebase仅当应用托管在 Firebase 中时,请求才被 CORS 政策阻止
【发布时间】:2020-11-29 15:34:59
【问题描述】:

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

访问 XMLHttpRequest 在 'https://discordapp.com/api/channels/689799838509957177/messages'来自 来源“https://autonet.tk”已被 CORS 策略阻止:响应 预检请求未通过访问控制检查:否 请求中存在“Access-Control-Allow-Origin”标头 资源。

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

我的代码:

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 应用程序的传入请求。 (没有允许的主机列表)。

【问题讨论】:

    标签: firebase cors discord endpoint flutter-http


    【解决方案1】:

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

    https://stackoverflow.com/a/20035319/14106548

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

    https://discord.com/api
    

    欲了解更多信息,请查看:https://discord.com/developers/docs/reference

    【讨论】:

    • 再次:它在本地机器上工作,相同的代码(具有相同的 api 端点)在不同的应用程序上工作。标题应该在响应中也是不正确的。浏览器阻止请求发出。它甚至在您链接的另一个 SO 问题中也是如此。
    • 阅读此链接。该标头必须在响应中:developer.mozilla.org/en-US/docs/Web/HTTP/CORS。这是一种用于避免从未经授权的域执行请求的策略。如果您尝试更改端点,就像我建议的那样,并且错误仍然存​​在,那么您可能需要在 discord api 中授权您的应用程序的域
    猜你喜欢
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 2022-01-14
    • 2018-03-22
    • 2020-07-29
    • 2021-09-17
    • 2019-11-30
    • 2019-10-01
    相关资源
    最近更新 更多