AXIOS 请求被浏览器缓存

测试兄弟今天提了个 BUG,发现在 IE 下修改列表数据后再重新查询,列表没有变化,而 Chrome 浏览器上正常。

经确认,是浏览器缓存所致,因为测试的时候习惯性打开 F12,勾选了 Disable cache(禁用缓存),所以没注意到。

而 IE 浏览器不常用,并且设置禁用缓存的方式没有 Chrome 那么方便。

但终其原因,还是代码编写上没有对 GET 请求进行缓存清理配置(同一个请求调用多次没有唯一标识)。

然后测试取消勾选了 Chrome 的 Disable cache 再试一下,还是正常的,这又要说到浏览器对于 GET 请求的区别对待了(主要是 IE)

浏览器对于 GET 请求会将请求结果缓存起来,而 POST 不会。其中更具体的细节是:

  • Chrome 和 Firefox 会检测 GET 请求的如果是静态资源才会缓存,如果是数据则不会缓存。
  • IE 浏览器则会将 GET 请求全部缓存,不会检测请求的是什么。

所以对于 GET 请求,最好还是在请求拦截器中加个时间戳吧。

关于 IE 如何禁用缓存:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当使用 Axios 请求本地 JSON 文件时,有可能会遇到 304 Not Modified 状态码的响应。这是因为浏览器在请求静态资源时,会在本地缓存中查找该资源,如果缓存中已经有该资源的副本并且其 ETag 没有发生变化,则服务器会返回 304 状态码,并告诉浏览器可以直接使用本地缓存中的资源。 为了避免这种情况的发生,我们可以在 Axios 请求时添加一些配置项,强制让浏览器每次都向服务器发送请求,而不是从本地缓存中获取资源。具体方法如下: ```javascript axios.get('data.json', { headers: { 'Cache-Control': 'no-cache', 'Pragma': 'no-cache' } }).then(response => { console.log(response.data); }).catch(error => { console.error(error); }); ``` 在上述代码中,我们向 Axios 的 get 方法中添加了 headers 配置项,该配置项中包含了两个属性:Cache-Control 和 Pragma。这两个属性会告诉浏览器不要使用缓存,而是每次都向服务器发送请求。 另外,我们也可以在服务器端设置响应头,告诉浏览器不要缓存该资源。具体方法如下(以 Node.js 为例): ```javascript const express = require('express'); const app = express(); app.get('/data.json', (req, res) => { res.setHeader('Cache-Control', 'no-cache'); res.setHeader('Pragma', 'no-cache'); res.sendFile(__dirname + '/data.json'); }); app.listen(3000, () => { console.log('Server is listening on port 3000'); }); ``` 在上述代码中,我们在服务器端设置了两个响应头:Cache-Control 和 Pragma,与前面的 Axios 配置项相同。这样浏览器每次请求该资源时,服务器都会返回一个新的响应。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值