GET请求缓存问题及解决方案

一、遇到的问题

最近在项目中遇到一个问题:由公司内网访问系统执行某一操作时,浏览器正确发送请求(服务端代码有打印日志),但使用公司外网执行形同操作,服务端未打印日志(请求并未到达服务端),浏览器却显示已发送请求,且返回了数据(但数据中的业务数据为空)。

初步判断应该是与外网有关,于是找到运维人员帮忙在服务器上抓包,结果发现外网的请求并未到达服务端,看来该问题应该是前端原因导致。

查看前端发起请求的代码,发现该请求是GET请求,查找资料后才知道:原来GET请求在有些浏览器中会缓存,再次请求时,浏览器不会发送请求,而是使用上次请求获取到的结果。

二、jQuery解决方案如下:

 $.ajax({
      url: '/outer/cert/extension/getLatestCertOperInfo',
      type: 'get',
      dataType: 'json',
      async: false,
      cache: false,
      success: function (data) {

      }
});

将cache设置为false。它的工作原理是在GET请求参数中附加时间戳"_={timestamp}"

注:也曾看到通过随机数形式解决Ajax中的缓存问题的方案,但是这种解决方案并不是特别可靠。因为随机数也有相同的情况。

猜你喜欢

转载自www.cnblogs.com/KingJames/p/11243704.html