http缓存
浏览器缓存
浏览器缓存是为了节约网络的资源加速浏览,浏览器在用户磁盘上对最近请求过的文档进行存储,当访问者再次访问这个页面时,浏览器就可以从本地磁盘显示文档,进而加快页面的浏览响应。
简言之,浏览器缓存为本地缓存。
浏览器缓存主要有两类:
- 缓存协商(Last-Modified/Etag):前往服务端询问是否修改过页面,没有修改过返回304直接使用缓存内容,否则返回新内容
----
last-modified 机制
1. 服务器发送带Last-modified:GMTtime 头的 http response
2. 浏览器下次请求带上if-modified-since:GMTtime http 请求头
3. 服务端用本地last-modified与if-modified-since比较,计算浏览器数据是否过期并发送响应。
---
Etag的工作原理与last-modified类似。不同点在于Etag的值是可以用户自定义的。
缓存协商可应用于动态页面且实时性不是特别强的页面,如网站首页。
- 彻底缓存(cache-control/Expires):在缓存失效前不需要再跟服务器进行交互。
1. 常用的是Expires,expires是一个绝对时间,由服务器产生。
2. 这样存在一个问题,如果服务器时间与客户端时间不一致导致缓存时间偏差。
3. 如果要解决这个问题需要使用cache-control,它保存的是相对浏览器的时间
4. 如果cache-control与expires同时存在,浏览器优先使用cache-control,没有cache-control的情况下再考虑expires。
浏览器缓存存在的最大价值是节省了带宽。没有提高吞吐率。为什么没有提高吞吐率分为两种情况:
1. 静态页面:浏览器加载静态页面需要进行磁盘IO,浏览器缓存则节省了这部分时间。
2. 动态页面