You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter on Windows无法向WSL 2中运行的Node.js服务器发送HTTP请求

问题原因及解决方案

核心原因:Flutter Web的浏览器CORS策略拦截

你在Chrome中通过Dart VM Service运行Flutter应用,本质是Flutter Web应用,受浏览器的跨域资源共享(CORS)策略限制。而Postman是桌面客户端、浏览器直接访问URL时的请求模式,都不会触发CORS校验,所以能正常访问WSL2中的Node.js服务器。

具体解决方案

1. 给Node.js服务器配置CORS中间件(推荐)

这是最规范的解决方式,直接在Express服务中允许跨域请求:

  • 安装CORS依赖:
    npm install cors
    
  • 在server.js中引入并启用:
    const express = require('express');
    const cors = require('cors');
    const app = express();
    
    // 开发环境可直接允许所有跨域请求
    app.use(cors());
    
    // 生产环境建议限制允许的源(比如Flutter Web的运行地址)
    // app.use(cors({
    //   origin: 'http://localhost:5000' // 替换为你的Flutter Web实际运行端口
    // }));
    
    app.get('/mint', (req, res) => {
      res.json({ message: "Service-mint is operational!" });
    });
    
    app.listen(3001, '0.0.0.0', () => {
      console.log('Server running on port 3001');
    });
    

重启Node.js服务器后,再用Flutter发起请求即可。

2. 使用Windows主机的局域网IP访问

WSL2的内部IP(172.18.129.5)是虚拟网络的地址,Flutter Web在Chrome中可能无法直接访问。换成Windows主机的局域网IP:

  • 在PowerShell中执行ipconfig,找到当前网络适配器的IPv4地址(比如192.168.1.100)
  • 修改Flutter请求地址:
    final response = await http.get(Uri.parse('http://192.168.1.100:3001/mint'));
    

3. 临时禁用Chrome的Web安全(仅开发环境)

如果只是临时验证问题,可以启动Chrome时关闭CORS校验:

  • 关闭所有Chrome窗口
  • 在命令提示符执行:
    chrome.exe --disable-web-security --user-data-dir="C:/TempChromeDev"
    
  • 在这个Chrome窗口中运行Flutter应用,即可正常发起请求(注意:此方法仅用于开发调试,生产环境绝对禁止)

补充说明

你之前尝试的防火墙、端口代理、监听0.0.0.0等操作,都是针对Windows和WSL2之间的网络连通性,但核心问题出在浏览器的CORS策略,所以这些操作无法解决Flutter Web的请求拦截问题。

内容的提问来源于stack exchange,提问作者Lance-Legrand NGANDO-DAVID

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 04:12:05