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

如何阻止Chrome调试时Dart HTTP将请求合并为带?next参数的形式

问题根因

你观察到的「请求合并」本质是浏览器自动处理重定向的表现:Web端请求/myDash时没有携带登录态Cookie,后端判定未登录,返回302重定向到/login?next=%2FmyDash,浏览器自动跟进重定向请求,才会出现你看到的合并格式URL。

具体解决步骤

1. 修复平台判断逻辑错误

你当前的myDash方法只给安卓、iOS端加了Cookie头,Web端请求完全没有携带登录态,直接导致后端返回重定向:

// 原代码的问题:只适配了移动端,没有覆盖Web场景
if (UniversalPlatform.isAndroid || UniversalPlatform.isIOS) {
  print("<<Is android>");
  headers.addAll({'Cookie': sessionCookie});
}

同时注意:Web端禁止手动设置Cookie头,Cookie属于浏览器禁止修改的请求首部,手动添加会被浏览器直接拦截,不会生效。

2. 适配Web端凭证携带规则

http包专门为Web端提供了withCredentials配置项,开启后浏览器会自动管理同域Cookie(自动携带请求Cookie、保存后端返回的Set-Cookie),不需要你手动存储操作:
修改两个请求的代码,增加withCredentials配置:

// 登录请求修改
var request = http.MultipartRequest('POST', Uri.parse(domain + '/login'));
request.followRedirects = false;
request.persistentConnection = false;
// 新增这行,适配Web端凭证携带
request.withCredentials = true;

// 拉取数据请求修改
var request = http.Request('GET', Uri.parse(domain + '/myDash'));
// 新增这行,适配Web端凭证携带
request.withCredentials = true;

Web端可以直接删除手动设置Cookie、手动存储sessionCookie的逻辑,完全交给浏览器处理即可,原有手动存Cookie的逻辑保留给移动端使用就行。

3. 调整Flask后端CORS配置

Web端跨域请求要正常携带Cookie,后端需要做对应的CORS配置:

  • 安装flask-cors依赖
  • 配置时开启supports_credentials = True
  • origins不能设为通配符*,必须明确填写你Flutter Web的调试地址(比如http://localhost:54321,你可以在Chrome地址栏看到实际的调试端口)
    示例配置:
from flask_cors import CORS
app = Flask(__name__)
CORS(app, origins=["http://localhost:你的Flutter Web调试端口"], supports_credentials=True)

4. 可选优化:替换Multipart请求

你用MultipartRequest提交普通表单完全没必要,直接用http.post方法提交FormData更简单,也不会有额外的开销:

// 替换原有Multipart请求逻辑
var response = await http.post(
  Uri.parse(domain + '/login'),
  body: {'username': username, 'password': paswd},
  headers: headers,
);

修改完成后重启调试,就能看到两个请求独立发起,不会再出现重定向合并的情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 09:00:05