描述

同一个标签页,打开 A 站点,访问 config 接口,正常;打开 B 站点,访问 config 接口,正常;通过浏览器后退返回 A 站点,访问 config 接口,数据异常,config 返回了 B 站点的数据。

测试站点数据

https://a.aaa.com
https://b.bbb.com

分析

判断是否是前端问题

通过观察,后退时仍然向服务器发送了请求,调用了 config 接口,可以排除

判断是不是前端本地存储未更新

通过观察,config 接口返回的内容仍然是 B 站点的数据,排除本地存储未更新

结论:后端返回数据未更新

(好了,锅甩出去了)

but,站点已经改变了,接口也重新请求了,为什么后端返回数据未更新

结论:浏览器缓存问题

原理:符合缓存策略时,服务器不会发送新的资源,但不是说客户端和服务器就没有会话了,客户端还是会发请求到服务器的,响应的是缓存的内容。

如何解决

后端:在响应头中添加 cache-control: no-store

前端:在 ajax 请求 url 后面加上一个随机数

原理:ajax 填入相同的 url 的时候会使用缓存

常用的修改随机数的方法

url=xxxxxxxx?time=new Date(); // 加时间戳
url=xxxxxxxx?number=Math.random(); // 加随机数

对比解决方案

为什么不能设置请求头 Cache-Control: no-cache?

catch-control 是客户端单向的指令,服务器端可能没有同样的指令

为什么不能设置 meta 标签?

<html><meta http-equiv="pragma" content="no-cache" /><meta http-equiv="Cache-Control" content="no-store, must-revalidate" /><meta http-equiv="expires" content="Wed, 26 Feb 1997 08:21:57 GMT" /><meta http-equiv="expires" content="0" />
</html>

meta 标签的解析实现不是所有浏览器的必然支持的,你给了某个标签,也只是建议浏览器应该怎么做而已,具体的浏览器对页面缓存的设置可能会让表现有异常

memory cache 内存缓存就是这样的,从这里获取内容时,就是会忽略些头部配置,比如 no-cache 或者 max-age=0 之类的。

如果想确保一定是新的,就要在服务端响应头中设置 cache-control:no-store

终于解决了 bug,现在可以来看一看 Cache-Control 是一个什么东西了。

Cache-Control

用于 HTTP 请求和响应中的,通过指定指令实现缓存机制。缓存指令是单向的,意味着在请求中设置的指令,不一定被包含在响应中。

指令(参数)

public
响应可以被任何对象(客户端、代理服务器等)缓存
no-cache
强制要求缓存把请求提交给原始服务器进行验证(协商缓存验证)
no-store
不使用任何缓存
max-age
缓存最大周期
must-revalidate
一旦资源过期,在成功向原始服务器验证之前,不能缓存响应后的任何数据

缓存控制

控制是否开启缓存

字段:Pragma 和 Cache-Control

Pragma:no-cache 禁用缓存 (HTTP/1.0)
Cache-Control:缓存控制 (HTTP/1.1)

注意:符合缓存策略时,服务器不会发送新的资源,但不是说客户端和服务器就没有会话了,客户端还是会发请求到服务器的。

优先级从高到低是 Pragma -> Cache-Control -> Expires

缓存校验

校验缓存是否过期

字段:Expires 和 Last-Modified 和 etag

Expires:缓存有效时间 (HTTP/1.0)
Last-Modified:资源最后修改时间 (HTTP/1.1)
etag:用于处理修改时间变了,但是内容没变的 bug (HTTP/1.1)

Cache-Control浏览器缓存相关推荐

  1. 缓存系列之一:buffer、cache与浏览器缓存

    缓存系列之一:buffer.cache与浏览器缓存 一:缓存是为了调节速度不一致的两个或多个不同的物质的速度,在中间对速度较快的一方起到一个加速访问速度较慢的一方的作用,比如CPU的一级.二级缓存是保 ...

  2. 每次都要清理cache?强制不让浏览器缓存!

    调试网页flash程序,总需要强力缓存是不是很恶心. 看看这篇文章: 做过网页方面工作的朋友一定知道浏览器缓存(cache)这个机制,但是在开发中是一个比较烦人功能,每次修改了代码,想刷新看结果,这时 ...

  3. Chrome 技术篇-F12开发者工具清理缓存,高级、专业清浏览器缓存,storage和cache都指什么、区别

    作为一名开发,作为一名技术人员,直接用浏览器清缓存的话会显的不够专业. 开发者工具清理的好处: 它可以很清晰的清理对应的缓存,让我们知道哪些缓存对我们的哪些代码有影响,提高我们对整体代码的把控,提升我 ...

  4. chrome浏览器缓存 from disk cache

    今天遇到个问题,同样的两个前端项目,服务器也一样,但是有一个项目的接口出现status:200 (from disk cache),之前从没遇见过,在此记录一下.解决办法:只要清除浏览器缓存(更多工具 ...

  5. 浏览器缓存:memory cache、disk cache、强缓存协商缓存等概念

    文章目录 分类 memory cache disk cache Service Worker Push Cache 缓存过程 强缓存 1.Expires 2.Cache-Control Expires ...

  6. 浏览器缓存(一):强缓存 MEMORY CACHE 和 DISK CACHE

    关于memory cache 和 disk cache 随便浏览一个网站: 首次打开,或者开启浏览器的 Disable Cache(浏览器的Network下, 与Preserve log同级别),在s ...

  7. js html 图片 缓存问题,如何防止浏览器缓存CACHE?将CSS、JS、图片加上参数

    什么是浏览器缓存 浏览器缓存功能是网页性能优化的项目之一 使用浏览器缓存功能如果用户再次来到您的网站,缓存css.js.jpg.png图档等静态资源将能使网页打开速度加快,同时也能减少服务器负担. 更 ...

  8. 浏览器缓存Cache

    首先缓存的优点是:缓解服务端压力:快. 强缓存和协商缓存 强缓存是从本地缓存数据表中去取资源,不向服务端发送请求:协商缓存意思是每次使用缓存前都要和服务端进行确认. 从Response Header的 ...

  9. cache-control_网站 cache control 最佳实践

    有时,当第二次访问网站时,看起来比较怪,样式不正常. 通常,是因为 cache control 缓存控制策略定义不正确,导致服务端最新部署之后客户端没有接收到最新的更改. 本文将向您展示正确的缓存设置 ...

  10. 利用浏览器缓存抓取网络资源:【炉石传说】所有卡牌png图片地址

    有的时候我们在网络上看到很好的资源,想要抓取,却苦于没有好的手段.今天我就来介绍一下通过chrome浏览器缓存抓取的方法. 大家都知道,浏览器把网页展示给我们看的时候,会先将页面上的所有图片等资源下载 ...

最新文章

  1. 中文详解phpmailer所有对象和属性
  2. 数据结构笔记 递推与迭代
  3. day22 time模块
  4. 《深入理解Elasticsearch(原书第2版)》一1.3 在线书店示例
  5. systemverilog硬件设计及建模_Chisel引领敏捷硬件开发浪潮
  6. Java查询图书信息
  7. transporter上传卡正在交付_Xcode11,Transporter上传卡在——正在验证 APP - 正在通过App Store进行认证...
  8. python的标志为什么是蛇_Python 为什么推荐蛇形命名法原因浅析
  9. C#参考 : 枚举类型
  10. Linux 进入 5.0 时代!
  11. R文件报错:cannot resolve symbol ‘R’
  12. python3 十六进制字符串进行分割并累加
  13. window.location.href不打开新窗口_在使用网站时,什么情况该用新窗口打开?
  14. 微型计算机的Usb有几个,一起来侃侃USB/eSATA二合一接口
  15. 服务器装win7找不到硬盘驱动,电脑找不到硬盘驱动器,教你win7电脑找不到硬盘驱动器的解决方法...
  16. ISA TEST黑客过关小游戏第二关解密
  17. 智能快递柜 软件架构 linux,13.智能快递柜(对接流程)
  18. 计算机科学班会,计算机科学与技术学院20级13班召开“砥砺前行,“计”往开来”主题班会...
  19. ioi 赛制_钟子谦IOI2019参赛总结
  20. msm8916 lcd 相关调试点指导

热门文章

  1. 久久都不明白的cookie
  2. 数据分析技能点-Excel的36个常规操作
  3. 关于防火墙安全及功能简介
  4. SmS-Activate一款好用的短信验证码接收工具
  5. CentOS7安装harbor仓库
  6. 浅谈外挂常识和如何防御
  7. html5 css 响应式_在HTML5 / CSS3中编写响应式简历
  8. 灰度共生矩阵(Gray-level Co-occurrence Matrix,GLCM)
  9. 贝岭ADC(BL1063/BLAD16J125)使用和配置问题
  10. python画猪猪侠_猪猪侠简笔画怎么画?猪猪侠简笔画教程