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

Flutter Web应用HTTP请求遇CORS拦截问题求助

Flutter Web 请求谷歌出现 CORS 错误的解决办法

问题核心

你遇到的问题本质是:CORS 是浏览器的安全机制,你在请求里添加的 Access-Control-* 头是服务端应该返回给浏览器的响应头,不是客户端需要发送的请求头。谷歌的服务器不会给你的 localhost 域名返回允许跨域的响应头,所以浏览器直接拦截了请求,你加再多请求头也没用。

解决办法

1. 开发环境临时方案:代理中转

浏览器的CORS限制只针对前端直接请求第三方服务,通过代理服务器中转请求就能绕开这个限制:

  • 搭个简单的Node.js代理(需先安装express和http-proxy-middleware):
    const express = require('express');
    const { createProxyMiddleware } = require('http-proxy-middleware');
    const app = express();
    
    // 将 /google 路径的请求转发到谷歌服务器
    app.use('/google', createProxyMiddleware({
      target: 'https://www.google.com',
      changeOrigin: true,
      pathRewrite: { '^/google': '' } // 移除请求路径前缀
    }));
    
    app.listen(3000, () => console.log('代理服务器运行在 3000 端口'));
    
  • 修改Flutter代码,请求代理地址:
    var client = http.Client();
    try {
      var url = 'http://localhost:3000/google/';
      var response = await http.get(Uri.parse(url));
      print(response.body);
      print(response.statusCode);
    } finally {
      client.close();
    }
    

2. 生产环境方案:后端中转

如果应用要上线,不能依赖本地代理,需要用自己的后端服务做中转:

  • 让你的后端服务器发起对谷歌的请求,再把结果返回给Flutter Web前端
  • 前端仅请求自己的后端接口,这样就不会触发浏览器的CORS限制

3. 为什么之前正常?

如果之前请求没问题,大概率是你之前在Flutter移动端/桌面端测试——这些平台的HTTP请求不受浏览器CORS规则限制,只有Web端会触发这个机制。

内容的提问来源于stack exchange,提问作者Adnan Vallippadan

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 13:21:23