缓存过程浏览器
浏览器每次发起请求时,先在浏览器缓存中查找该请求的结果和缓存标志,根据查找结果决定是否向服务器发送请求。浏览器获取请求结果后,根据响应报文中 HTTP 头的缓存标识决定是否缓存请求结果。缓存
缓存类型性能优化
有两种,强制缓存和协商缓存。服务器
什么是强制缓存?post
强制缓存就是在浏览器缓存中查找请求结果,并根据该结果的缓存规则来决定是否使用该缓存结果的过程。性能
强制缓存的状况主要有三种:优化
强制缓存的缓存规则是什么?代理
控制强制请求的请求头是Expires
和Cache-Control
,Cache-Control
优先级比Expires
高。code
HTTP 1.0
使用Expires
控制网页缓存,它的值为服务器返回的请求结果缓存的到期时间,再次发送请求时,若是客户端的时间小于Expires
的值,就直接使用缓存结果。使用Expires
存在客户端与服务器时间可能有偏差的问题。cdn
HTTP 1.1
使用Cache-Control
代替了Expires
。Cache-Control
能够取如下值
Cache-Control值 | 含义 |
---|---|
no-store |
禁止对请求和响应内容进行缓存 |
no-cache |
强制确认缓存,每次都将请求发送给服务器,由服务器验证请求中所描述的缓存是否过时,未过时就返回 304 |
private |
响应内容只有客户端能够缓存,代理服务器不能够缓存,Cache-Control 的默认值 |
public |
相应内容能够被任何中间人(代理、CDN 等)缓存 |
max-age |
缓存内容将在设定的多少秒后失效 |
Expires
和Cache-Control
同时存在时,只有Cache-Control
生效。
浏览器中如何判断强制缓存是否生效?
打开控制台,选择Network
,在Size
列查看,若是显示灰色的from memory cache
或者from disk cache
表示使用了强缓存。
from memory cache
表示使用内存中的缓存。内存缓存具备快速读取和时效性两个特色。
from disk cache
表示硬盘缓存。硬盘缓存将缓存写入硬盘文件中,读取缓存时须要对该缓存存放的硬盘文件进行 I/O 操做,而后从新解析缓存内容,读取复杂,速度比内存缓存慢。什么是协商缓存?
协商缓存是指强制缓存失效后,浏览器携带缓存标识向服务器发起请求,服务器根据缓存标识决定是否使用缓存的过程。
协商缓存主要有如下两种状况:
协商缓存生效,返回 304;
协商缓存失效,返回 200 和请求结果。
协商缓存的规则是什么?
控制协商缓存的响应头有Last-Modified
和Etag
,请求头有If-Modified-Since
和If-None-Match
。Etag
/If-None-Match
这对头部比Last-Modified
/If-Modified-Since
优先级高。
头部 | 含义 |
---|---|
Last-Modified (响应头) |
返回的资源文件在服务器最后被修改的时间 |
If-Modified-Since (请求头) |
客户端再次发起请求时,携带上次请求返回的Last-Modified 值 |
Etag (响应头) |
返回的资源文件的惟一标识(由服务器生成) |
If-None-Match (请求头) |
客户端再次发起请求时,携带上次请求返回的Etag值 |
If-Modified-Since
后,用该值与该资源在服务器的最后修改时间作对比,若是客户端资源不是最新的,则从新返回资源,状态码为 200;不然返回状态码 304,表示资源没有更新。If-None-Match
字段后,用该值与该资源在服务器的最新Etag
进行对比,一致就返回 304,表示资源没有更新;不然从新返回资源文件,状态码为200。详解:
参考: