
文章插图
缓存行为主要由缓存策略决定 , 而缓存策略由内容拥有者设置 。这些策略主要通过特定的HTTP头部来清晰地表达 。
以上过程也可以被概括为三个阶段:
- 本地缓存阶段:先在本地查找该资源 , 如果有发现该资源 , 而且该资源还没有过期 , 就使用这一个资源 , 完全不会发送http请求到服务器;
- 协商缓存阶段:如果在本地缓存找到对应的资源 , 但是不知道该资源是否过期或者已经过期 , 则发一个http请求到服务器 , 然后服务器判断这个请求 , 如果请求的资源在服务器上没有改动过 , 则返回304 , 让浏览器使用本地找到的那个资源;
- 缓存失败阶段:当服务器发现请求的资源已经修改过 , 或者这是一个新的请求(在本来没有找到资源) , 服务器则返回该资源的数据 , 并且返回200 , 当然这个是指找到资源的情况下 , 如果服务器上没有这个资源 , 则返回404 。
用户在使用浏览器的时候 , 会有各种操作 , 比如输入地址后回车 , 按F5刷新等 , 这些行为会对缓存有什么影响呢?

文章插图
通过上表我们可以看到 , 当用户在按 F5进行刷新的时候 , 会忽略Expires/Cache-Control的设置 , 会再次发送请求去服务器请求 , 而Last-Modified/Etag还是有效的 , 服务器会根据情况判断返回304还是200;
而当用户使用 Ctrl+F5进行强制刷新的时候 , 只是所有的缓存机制都将失效 , 重新从服务器拉去资源 。
- 普通刷新 – 当按下F5或者点击刷新按钮来刷新页面的时候 , 浏览器将绕过本地缓存来发送请求到服务器, 此时, 协商缓存是有效的
- 强制刷新 – 当按下ctrl+F5来刷新页面的时候, 浏览器将绕过各种缓存(本地缓存和协商缓存), 直接让服务器返回最新的资源
- 回车或转向 – 当在地址栏上输入回车或者按下跳转按钮的时候, 所有缓存都生效
- 同一个资源保证URL的稳定性
- 给css、js、图片等资源增加HTTP缓存头 , 并强制入口html不被缓存
- 减少对Cookie的依赖
- 多用Get方式请求动态Cgi
- 动态CGI也是可以被缓存
推荐阅读
- 7个问题,带你一文读懂LPR
- chrome浏览器怎么更改代理服务器设置?
- 通过简单设置,让谷歌浏览器符合你的使用习惯
- 一文搞明白DNS的来龙去脉
- 一文看懂Linux开机流程BIOS->MBR->GRUB->Kernel->Init->Runlevel
- 一文帮你读懂Java浮点数的存储原理
- Mac电脑浏览器辅助工具
- 一文讲弄懂vlan、三层交换机、网关、DNS、子网掩码、MAC地址
- 一文了解 Redis 内存监控和内存消耗
- 一文告诉你信息流和竞价的区别在哪里?
