# 十.cache
# 1.是否禁止缓存
- 禁止缓存指的是缓存中不得存储任何关于客户端请求和服务端响应的内容,每次由客户端发起的请求都会下载完整的响应内容。
- 在请求头中,
Cache-Control:no-store
与Pragma:no-cache
都可以禁止缓存Pragma:no-cache
可以兼容http 1.0
Cache-Control:no-store
是http 1.1
提供的
# 2.是否检查本地副本是否过期
是否检查本地版本是否过期主要是由Cache-Contro
的no-cache
和must-revalidate
这两个可选值控制,其中:
no-cache
告诉浏览器、缓存服务器,不管本地副本是否过期,使用资源副本前,一定要到源服务器进行副本有效性校验。must-revalidate
告诉浏览器、缓存服务器,本地副本过期前,可以使用本地副本;本地副本一旦过期,必须去源服务器进行有效性校验。
# 3.本地副本是否过期
想要知道本地副本是否过期,我们就要了解缓存的过期机制
- 1.过期机制中,最重要的指令是
max-age=<seconds>
,它表示资源能够被缓存的最大时间;它通常会和must-revalidate
一起使用
Cache-Control:nax-age=60,must-revalidate
1
- 2.如果不含有
max-age
属性,则会去查看是否包含Expires
属性,通过比较Expires
的值和响应头里面Date
属性的值来判断缓存是否有效。 - 3.如果
max-age
和expires
属性都没有,可以查看响应头里面的Last-Modifined
信息。如果有,缓存的寿命就等于响应头里面Date
的值减去Last-Modified
的值除以 10
# 4.如果本地副本没有过期
如果本地副本没有过期,自会直接从缓存中读取资源,并返回 200 状态
# 5.如果副本过期
如果副本过期,则会进行到源服务器进行有效性校验的前期准备
- 首先,会在请求头里寻找
If-None-Match
字段,其值为服务器上次返回的ETag
响应头的值: - 如果请求头里面没有
if-None-Match
字段,怎会在请求头中寻找if-Modified-Since
字段,其值为服务器上次返回的Last-Modified
响应头中的日期值
# 6.到源服务器进行有效性校验
如果请求头中带有if-None-Match
或if-Modified-Since
,则会到源服务器机进行有效性校验,如果源服务器资源没有变化,则返回 304,如果有变化,则返回 200