强缓存和协商缓存html
强缓存在请求一个文件前先检查本地缓存有没有该文件。浏览器
与强缓存有关的请求头主要有两个:缓存
Expires的值为服务端返回的到期时间,这个时间是一个绝对的时间,若是下一次请求时,请求时间小于服务端返回的到期时间,直接使用缓存数据。服务器
Expires会有一个问题:即时间是由服务端生成的,可能会和客户端的时间有偏差,进而致使缓存命中偏差。网络
这个字段只适用于 HTTP 1.0,如今主流浏览器默认使用HTTP 1.1,故该字段不是很重要。并发
Cache-Control的值为服务端返回的到期时间,这个时间是一个相对的时间,若是下一次请求时,请求时间小于服务端返回的到期时间,直接使用缓存数据。代理
canche-control (http1.1)的常见取值 :htm
若是本地缓存的文件存在,发送一个http协议,询问服务器文件是否失效。blog
与协商缓存有关的请求头主要有两对:资源
第一次请求资源时,服务器下发Last-Modified,这个时间是一个绝对时间,表示资源最后修改的时间。
再次请求服务器时,客户端会把Last-Modified的值赋给If-Modified-Since,并发给服务器。
服务器收到请求后发现有头If-Modified-Since 则与被请求资源的最后修改时间进行比对。
若资源的最后修改时间大于If-Modified-Since,说明资源有被改动过,则响应整片资源内容,返回状态码200和新的last-modified,客户端收到响应后更新资源和资源的last-modified并使用最新的资源;
若资源的最后修改时间小于或等于If-Modified-Since,说明资源无最新修改,则响应HTTP 304,浏览器继续使用所保存的cache。
第一次请求资源时,服务器下发Etag,这个标识表示当前资源在服务器的惟一标识(生成规则由服务器决定)。
再次请求服务器时,客户端会把Etag的值赋If-None-Match,并发给服务器。
服务器收到请求后发现有头If-None-Match,则与被请求资源的惟一标识进行比对进行比对。
若两者不一样,说明资源有被改动过,则响应整片资源内容,返回状态码200和新的Etag,客户端收到响应后更新资源和资源的Etag并使用最新的资源;
若两者相同,说明资源无最新修改,则响应HTTP 304,浏览器继续使用所保存的cache。