实践参考

浏览器的缓存

Cache-Control 字段

服务器使用Cache-Control控制缓存功能

//设置缓存为30s,max-age是生存时间,和Date字段有关
Cache-Control:max-age=30

//不允许缓存,用于某些变化非常频繁的数据,例如秒杀页面
Cache-Control:no_store

//可以缓存,使用之前必须去服务器验证是否过期,是否有最新版本
Cache-Control:no_cache

//缓存不过期就可以继续使用,过期了如果还想使用就要去服务器验证
Cache-Control:must-revalidate

https://prod-files-secure.s3.us-west-2.amazonaws.com/c2d93f25-fd2b-4799-8114-a9c20ea9b277/b8bae442-86db-4454-8373-07e469afcf98/Untitled.png

客户端的缓存控制

  1. 点击刷新按钮时,浏览器会在请求头中加一个Cache-Control:max-age=0 ,即缓存是过期的,然后需要去验证缓存是否能使用
  2. 强制刷新时,浏览器会在请求头中加一个 Cache-Control:no_chche字段,即使用缓存必须验证。
  3. 在 前进、后退、跳转这些重定向动作中,只会用最基本的请求头,这时候Cache-Contrl字段才比较有用

验证缓存是否能使用需要使用条件请求字段

使用条件请求首先需要第一次的响应报文提供 Last-modified 和Etag,然后就可以在请求报文中发送 If-Modified-Since If-None-Match


//request header 如果 不 匹配 该Etag
If-None-Match: W/"5f8e6491-1420"

服务器去判断Etag是否相同,相同的话返回304

//response header
ETag: W/"5f8e6491-1420"