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

Flutter Web调用REST API遇CORS错误:缺少Access-Control-Allow-Origin头

解决Flutter Web连接REST API的CORS错误

问题核心

浏览器的CORS安全策略阻止了你的请求,原因是后端服务器在处理预检OPTIONS请求时,没有返回Access-Control-Allow-Origin响应头,导致浏览器判定该跨域请求不合法。

解决方案

后端配置(生产环境必须)

根据你的后端技术栈,添加CORS响应头配置:

ASP.NET Core

在Program.cs中插入CORS中间件(必须放在路由配置之前):

var builder = WebApplication.CreateBuilder(args);

// 配置CORS策略
builder.Services.AddCors(options =>
{
    options.AddPolicy("AllowFlutterOrigin",
        policy => policy.WithOrigins("https://example.com") // 替换为你的Flutter Web域名
                        .AllowAnyHeader()
                        .AllowAnyMethod());
});

var app = builder.Build();

// 启用CORS
app.UseCors("AllowFlutterOrigin");

app.MapControllers();
app.Run();

开发环境可临时用.AllowAnyOrigin()允许所有域名,但生产环境必须指定具体域名。

Node.js/Express

先安装cors包:npm install cors,再配置:

const express = require('express');
const cors = require('cors');
const app = express();

// 允许指定Flutter Web域名
app.use(cors({
    origin: 'https://example.com'
}));

// 开发环境临时允许所有域名:app.use(cors());

app.listen(5050, () => console.log('Server running on port 5050'));

Python/Flask

安装flask-cors扩展:pip install flask-cors,再配置:

from flask import Flask
from flask_cors import CORS

app = Flask(__name__)
# 允许指定Flutter Web域名
CORS(app, origins=["https://example.com"])

# 开发环境临时允许所有域名:CORS(app)

@app.route('/api/Data/GetData')
def get_data():
    return {"data": "sample content"}

if __name__ == '__main__':
    app.run(port=5050)

前端临时调试方案(仅开发环境)

如果后端暂时无法修改,可启动Flutter Web时关闭浏览器安全策略(禁止用于生产):

flutter run -d chrome --web-browser-args "--disable-web-security"

额外注意事项

  • 确保CORS配置中的域名包含完整协议(https/http)和端口(如果Flutter Web使用非默认端口)。
  • 预检OPTIONS请求由浏览器自动发起,后端必须正确响应该请求,不能拦截或返回错误状态码。
  • 若之前的HTTP传输问题是混合内容(Flutter Web用https,后端用http),切换到https后需确保后端SSL证书有效,同时CORS配置同步更新。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 17:19:51