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

Flutter Web项目连续两次HTTP POST请求返回相同结果问题求助

问题原因与解决方案

你遇到的问题是Flutter Web环境下浏览器默认缓存HTTP请求导致的响应复用。http包在Web端基于浏览器的XHR/Fetch API实现,默认遵循浏览器缓存策略,即使是POST请求、两次请求路径不同,也可能因为缺少明确的缓存控制头,被浏览器直接复用之前的响应结果,和你代码中的await异步逻辑无关。

修复方案

  1. 添加缓存控制头
    在所有HTTP请求的headers中添加禁用缓存的字段,明确告知浏览器不要缓存当前请求的响应,修改后的请求头配置如下:
final response = await http.post(
  url,
  headers: {
    HttpHeaders.contentTypeHeader: "application/json",
    "token": jwt,
    // 新增以下3个缓存控制字段
    "Cache-Control": "no-cache, no-store, must-revalidate",
    "Pragma": "no-cache",
    "Expires": "0",
  },
  body: jsonEncode({"id": id}),
);

需要把getEntity1ById和getEntity2s两个方法中的POST请求都按上述配置修改headers。

  1. 问题验证
    打开浏览器开发者工具的「网络」面板,重新触发请求查看两次请求的实际状态:
  • 如果响应来源标注为disk cache或memory cache,说明请求没有发送到服务端,是浏览器直接返回了缓存内容,加上述头即可解决。
  • 如果请求确实发送到了服务端、返回内容相同,用Postman等工具单独调用两个接口,确认后端两个路由的返回结果是否符合预期,排除后端路由配置错误的问题。
  1. 隐性问题排查
    在构建Uri后打印两个请求的完整地址,确认运行时实际请求的路径符合预期,避免常量拼写、Uri拼接时的隐性错误:
// 加在Uri构建完成之后
print(url.toString());
print(url2.toString());

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 08:45:01