提问者:小点点

Flutter web中的XMLHttpRequest错误[启用CORSAWSAPI网关]


注意:事实证明,这与flutter无关,而是与我将API网关设置为Lambda代理的事实有关

我试图从Flutter Web应用程序中命中APIendpoint,每次它都出错并给我以下错误。

获取传感器数据时出错:DioError[DioErrorType. RESPONSE]:XMLHttpRequest错误。

我知道在讨论这个问题的SO上有几个问题(像这样和这样),解决方案似乎是在服务器端启用CORS支持。我正在使用AWSAPI网关来构建API,我按照这些说明从API启用CORS支持。这是API网关控制台的CORS设置。

“访问-控制-允许-标头”中的文本是

'内容-类型, X-A mz-日期,授权,X-Api-密钥,X-A mz-安全-令牌'

在API网关上启用CORS似乎没有帮助,当我尝试API时,我仍然在Flutter Web应用程序上遇到同样的错误。

有趣的是,如果我从chromeAPI,API工作得很好(即在浏览器上粘贴APIURL并按回车键)。只有当我尝试从flutter网络应用程序中API时,它才会失败。

问题:如何在API网关中启用CORS支持,以便Flutter Web应用可以使用API?


共3个答案

匿名用户

这对我有用,我在lambda函数上添加了下面的标题

return {
    statusCode: 200,
     headers: {
  "Access-Control-Allow-Origin": "*", // Required for CORS support to work
  "Access-Control-Allow-Credentials": true, // Required for cookies, authorization headers with HTTPS
  "Access-Control-Allow-Headers": "Origin,Content-Type,X-Amz-Date,Authorization,X-Api-Key,X-Amz-Security-Token,locale",
  "Access-Control-Allow-Methods": "POST, OPTIONS"
},
    body: JSON.stringify(item)
};

匿名用户

我的服务器正在使用nginx,所以我通过将以下两行添加到我的API服务器的启用站点的配置文件的服务器块来解决这个问题:

add_header Access-Control-Allow-Origin "*";
add_header Access-Control-Allow-Methods "GET, HEAD";

我的应用程序只使用GETHEAD,因此您可能需要根据您的情况添加其他方法。

另请参阅:如何在Apache和Nginx中启用CORS?

匿名用户

我使用Nodejs作为我的后端。当我从Dio发送帖子请求时,出现了这个错误:“XMLHttpRequest error.”。

此错误背后的原因:假设您的flutter运行在localhost:3000的localhost:5500和nodejs服务器上。因此,您的浏览器无法处理请求,因为它们运行在不同的端口上。这就是我们使用CORS或代理来解决这些问题。

请记住,这是一个主要与您的浏览器相关的问题。如果您将使用postman并发送相同的请求,您将发现一切正常。

为了解决这个问题:我安装了一个名为CORS的NPM包。

npm i  cors

然后,开始使用它……

const cors = require("cors");
app.use(cors());

只要这样做,你的错误就会得到解决。你不需要再添加任何东西。