一、概念
当浏览器加载一个html页面时,html中引入的外部资源也会被加载,其中包括一些不经常改变的css、js等静态资源,会耗费性能、影响首屏加载速度等不好的用户体验,从而提出缓存的概念,将不必要每次都重新加载的资源缓存到浏览器中,从缓存中读取这部分数据;
二、分类
强缓存 和 协商缓存
三、强缓存
- 定义:不去请求资源,只从缓存中读取;
- 弊端:当被缓存的资源有修改的时候,客户端不能随之响应;
- 使用条件:
在http1.0中expires存在的意义, 当客户端发送的时间戳与后端返回的expires时间不一致时,使用强缓存; - expires的不足:
客户端时间可以自定义,或客户端与服务器端时间快慢有差导致判断不够准确; - cache-control:
为弥补expires的不足,http1.1中添加cache-control(优先级高于expries), 其中包含no-cache、no-store、private、public、max-age等(如max-age设置20s后过期)。 - no-cache和no-store:
expires和cache-control都可以直接从本地缓存判断是否需要重新请求资源,但当设置no-cache和no-store后,本地缓存暂时被忽略,需要先请求服务器端询问是否需要请求资源。如果返回200,则继续使用本地缓存;如果返回304,则采用协商缓存。
四、协商缓存
如果过期了,返回200+新的资源,否则返回304
- last-modified & if-modified-since: 通过比较时间戳
- etag & if-none-match:通过比较内容(一般都返回内容摘要hash)
(需配合使用才有效)
网友评论