http 缓存分为客户端缓存和服务端缓存web
1. 客户端缓存浏览器
客户端缓存指的是浏览器缓存, 浏览器缓存是最快的缓存, 由于它直接从本地获取(但有可能须要发送一个请求), 它的优点是能够减小网络流量, 加快请求速度缓存
2. 服务器缓存服务器
服务器缓存指的是反向代理服务器或 cdn 缓存, 他的做用是用于减轻实际的 web server 的压力.网络
缓存生效都是经过 header 来控制的代理
1. Expirescdn
若是 repsonse 中带有 Expires=date, 则表示这个 response 能够由 浏览器/CDN 保存至 date 日期, 在到达 date 日期以前, 均可以直接提供给请求方, 对于浏览器缓存来讲, 则能够没必要发请求, 对于反向代理服务器来讲, 则能够不用请求原始 serverserver
2. Cache-Control资源
Cache-Control 的值有不少, 最经常使用的是 max-age, 若是 response 带有 max-age, 则表示从如今起到 max-age 以前, 这个 repsonse 均可以做为缓存使用文档
Server 的 Cache-Control
1. no-store, 提示客户端应该删除这个缓存
2. no-cache, 提示客户端在从新验证这个缓存以前不该该使用
3. max-age, 表示缓存的新鲜时间, 在此时间内能够不发送 http 请求去验证缓存而直接使用它, 若是 max-age=0. 则表示要求不要缓存文档
4. s-maxage, 功能与 max-age 相同, 但只对共享缓存生效(CDN, 反向代理)
Client 的 Cache-Control
1. max-stale, 可使用过时缓存
2. max-stale=s, 在 s 秒内, 缓存能够过时
3. min-fresh=s, 在 s 秒内, 缓存不能过时
4. max=age=s, 缓存的 age 必须小于 s 秒
5. no-cache, 除非资源进行再验证, 不然不接受缓存
6. no-store, 表示反向代理服务器不该该缓存这个请求的 response
7. only-if-cached, 只想要已缓存的数据, 不然返回 504
若是 Cache-Control 的 max-age 与 Expires 同时存在, 则 max-age 优先
3. Last-Modified/If-Modified-Since
若是 response 带有 Last-Modified, 则 request 在 Expires 跟 Cache-Control 的缓存过时后, 可使用将 Last-Modified 的时间带到 request header If-Modified-Since 里, 去 server 端校验缓存是否改变, 若是 server 回复 304, 则能够继续使用本地缓存
4. ETag/If-None-Match
若是 response 带有 ETag, 则 request 在 Expires 跟 Cache-Control 的缓存过时后, 能够将 Etag 的值带到 request header If-None-Match, 若是 server 回复 304, 则能够继续使用本地缓存
5. ETag & Last-Modified
若是 response 同时包含 ETag 与 Last-Modified, 则 request 须要同时发送 If-Modified-Since 和 If-None-Match, 而且 server 须要二者同时校验经过才返回 304.