Ajax 请求被缓存了怎么办? Mr.卫红 提问于 2026-03-12 23:00:19 阅读 5 前端 我用 fetch 发起一个 GET 请求获取用户数据,但发现第二次请求直接返回了缓存结果,根本没发到服务器!明明后端数据已经变了。 试过在 URL 后面加时间戳参数,比如 ?t=Date.now(),虽然能绕过缓存,但感觉不太优雅。有没有更规范的解决办法?是不是应该让后端控制缓存头? 这是我的请求代码: fetch('/api/user/profile') .then(res => res.json()) .then(data => console.log(data)); 我来解答 赞 2 收藏 分享 生成中... 手机扫码查看 复制链接 生成海报 反馈 发表解答 您需要先 登录/注册 才能发表解答 1 条解答 俊美 Dev Lv1 这个问题很常见,fetch 默认会遵守 HTTP 缓存规则,GET 请求很容易被浏览器缓存。 最直接的解决办法是在 fetch 配置里加 cache 选项: fetch('/api/user/profile', { cache: 'no-store' // 彻底禁用缓存,每次都发请求 }) .then(res => res.json()) .then(data => console.log(data)) cache 还有几个可选值: - no-store 完全不缓存 - no-cache 缓存但每次都验证(类似 ETag 机制) - reload 忽略缓存,重新获取 如果你想更规范一些,可以让后端在响应头里控制缓存行为。在后端加上: // Node.js/Express 示例 res.set('Cache-Control', 'no-cache, no-store, must-revalidate'); res.set('Pragma', 'no-cache'); // 兼容 HTTP/1.0 res.set('Expires', '0'); 这样前端不加任何配置也能禁用缓存。两种方式结合用最稳妥,前端防一手,后端再防一手。 时间戳那种做法确实 low,能用配置解决就用配置吧。 回复 点赞 2026-03-12 23:02 加载更多 相关推荐 1 回答 23 浏览 Ajax发送JSON数据时服务器返回400错误怎么办? 我在用jQuery的$.ajax发送POST请求时,把数据对象直接写在data参数里,服务器提示400错误说"Unexpected token"。 尝试过把contentType设成applicati... 公孙庆玲 前端 2026-02-16 20:31:24 1 回答 23 浏览 为什么设置了timeout的JQuery Ajax请求还是没超时? 我在用JQuery的$.ajax发请求时设置了timeout: 2000,但实际测试发现请求超过3秒后还是继续执行了,甚至没有触发error回调。之前试过把timeout改成1000都试过,但问题依旧... 欣怡酱~ 前端 2026-02-16 15:10:33 2 回答 41 浏览 Ajax重试机制怎么设置自适应延迟和避免重复提交? 在开发订单提交功能时,遇到网络波动导致Ajax请求失败需要重试。现在用递归setTimeout实现重试,但问题来了:retryCount++后每次固定延迟2秒,遇到服务器503错误时想改成指数递增延迟... 俊蓓 Dev 前端 2026-02-08 21:01:30 1 回答 157 浏览 CSRF Token在AJAX请求中失效怎么办?后端返回403错误 我在做用户资料更新功能时遇到了问题。后端要求所有POST请求必须携带CSRF Token,我按照常规做法在表单里加了隐藏字段_csrf,但用fetch提交时后端一直返回403。 尝试过把token放在... 宇文青燕 安全 2026-01-31 14:00:33 2 回答 19 浏览 如何限制 Ajax 并发请求数量避免浏览器卡死? 我正在做一个图片上传功能,用户一次能选几十张图,我用 Promise.all 发起并发请求,结果浏览器直接卡住了,甚至有些请求失败了。试过自己写队列控制,但逻辑太乱没搞定。 是不是应该限制同时进行的请... Good“嘉木 前端 2026-03-02 18:45:19 2 回答 32 浏览 Vue组件销毁时为什么之前的AJAX请求没被取消? 在做搜索框实时查询功能时,当我快速输入多个字符导致多次发送请求,虽然用了abortController,但页面跳转时控制台还是报错"AbortError",之前的请求好像没完全取消。 我的代码是这样写... Tr° 鑫丹 前端 2026-02-13 18:24:31 2 回答 36 浏览 为什么我的Ajax请求突然报CORS错误?之前还能正常工作? 我在用Vue写一个表单提交功能,突然发现用axios发POST请求到后端PHP接口时,浏览器直接报CORS错误,明明昨天还能正常工作... 前端代码没改过,就是普通的axios配置:axios.pos... 公孙洪滨 前端 2026-02-12 19:46:25 2 回答 47 浏览 Vue中Ajax请求失败后如何实现自动重试? 最近在做数据上报功能时遇到问题,想给axios请求加重试机制。比如网络波动时自动重试3次,但试了setTimeout递归调用,发现每次重试都同时发送了请求,反而更卡了... 这是我的代码片段:<... Dev · 星宇 前端 2026-02-09 18:57:30 2 回答 51 浏览 设置了connect-src后为什么我的API请求仍然被CSP拦截? 我在页面里通过AJAX请求https://api.example.com/data时,控制台报错: "Refused to connect to 'https://api.example.com/da... 欣怡的笔记 安全 2026-02-05 21:14:54 2 回答 24 浏览 如何在AJAX请求超时时正确取消未完成的请求? 在做搜索联想功能时,用户快速输入会导致之前的请求还没回来就覆盖了结果。我用XMLHttpRequest尝试用abort()取消,但代码写法好像有问题: let xhr; function search... 司马春萍 前端 2026-02-03 22:42:32
最直接的解决办法是在 fetch 配置里加 cache 选项:
cache 还有几个可选值:
- no-store 完全不缓存
- no-cache 缓存但每次都验证(类似 ETag 机制)
- reload 忽略缓存,重新获取
如果你想更规范一些,可以让后端在响应头里控制缓存行为。在后端加上:
这样前端不加任何配置也能禁用缓存。两种方式结合用最稳妥,前端防一手,后端再防一手。
时间戳那种做法确实 low,能用配置解决就用配置吧。