先来说一下缓存的优点
- 减少了冗余的数据传递,节省宽带流量
- 减少了服务器的负担,大大提高了网站性能
- 加快了客户端加载网页的速度 这也正是HTTP缓存属于客户端缓存的原因
强制缓存
当缓存数据库中已经有了请求的数据时,如果没有,客户端则会从服务器获取数据,如果有,客户端会直接从缓存数据库中获取数据,期间并不发送服务器请求,返回状态码为200(from cache)
强制缓存可以通过以下字段来控制
cache-control:
private:客户端缓存
public:客户端与服务端都可以缓存
max-age=n :缓存内容在n秒后过期
no-cache:需要协商缓存验证数据
no-store:不缓存
expires:
设置服务端返回数据的到期时间,可以被cache-control替代
协商缓存
又称为对比缓存,客户端从缓存数据库中获取缓存数据的标识,然后向服务器发送请求,验证该数据是否失效,如果没失效,则服务器返回304,客户端从缓存数据库中读取数据,如果失效,则请求新的数据
协商缓存可以通过以下字段来控制
Last-Modified
服务器响应请求时会告诉浏览器数据最后修改的时间,再次请求时通过时间判断资源是否更新
Etag
服务器响应请求时会通过该字段告诉浏览器当前资源在服务器的唯一标识,当浏览器再次请求时,对比该表示来判断资源是否更新
Etag的计算是使用算法来得出的,而算法会占用服务端计算的资源,所有服务端的资源都是宝贵的,所以就很少使用Etag了