Flutter Web项目连续两次HTTP POST请求返回相同结果问题求助
问题原因与解决方案
你遇到的问题是Flutter Web环境下浏览器默认缓存HTTP请求导致的响应复用。http包在Web端基于浏览器的XHR/Fetch API实现,默认遵循浏览器缓存策略,即使是POST请求、两次请求路径不同,也可能因为缺少明确的缓存控制头,被浏览器直接复用之前的响应结果,和你代码中的await异步逻辑无关。
修复方案
- 添加缓存控制头
在所有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。
- 问题验证
打开浏览器开发者工具的「网络」面板,重新触发请求查看两次请求的实际状态:
- 如果响应来源标注为
disk cache或memory cache,说明请求没有发送到服务端,是浏览器直接返回了缓存内容,加上述头即可解决。 - 如果请求确实发送到了服务端、返回内容相同,用Postman等工具单独调用两个接口,确认后端两个路由的返回结果是否符合预期,排除后端路由配置错误的问题。
- 隐性问题排查
在构建Uri后打印两个请求的完整地址,确认运行时实际请求的路径符合预期,避免常量拼写、Uri拼接时的隐性错误:
// 加在Uri构建完成之后 print(url.toString()); print(url2.toString());
内容的提问来源于stack exchange,提问作者serhankars
相关产品推荐
相关产品推荐

