-
什么是缓存?
浏览器缓存(Brower Caching)是浏览器对之前请求过的文件进行缓存,以便下一次访问时重复使用,节省带宽,提高访问速度,降低服务器压力
http缓存机制主要在http响应头中设定,响应头中相关字段为(强制缓存)Expires、Cache-Control、(协商缓存) Last-Modified、Etag。
2,为什么需要使用HTTP缓存?
在输入网址到加载页面的过程中,一般会经过CPU计算、页面渲染以及网络请求等过程,其中网络请求是唯一不确定的因素,会受到环境因素的影响。所以需要HTTP缓存减少网络请求,以至于页面能够快速渲染。
// Cache-Control中可以设置
// (1) max-age:用来设置资源(representations)可以被缓存多长时间,单位为秒;
// (2) s-maxage:和max-age是一样的,不过它只针对代理服务器缓存而言;
// (3)public:指示响应可被任何缓存区缓存;
// (4)private:只能针对个人用户,而不能被代理服务器缓存;
// (5)no-cache:强制客户端直接向服务器发送请求,也就是说每次请求都必须向服务器发送。服务器接收到请求,然后判断资源是否变更,是则返回新内容,否则返回304,未变更。这个很容易让人产生误解,使人误以为是响应不被缓存。实际上Cache-Control:no-cache是会被缓存的,只不过每次在向客户端(浏览器)提供响应数据时,缓存都要向服务器评估缓存响应的有效性。
// (6)no-store:禁止一切缓存(这个才是响应不被缓存的意思)。
// 强缓存:浏览器不会向服务器发送任何请求,直接从本地缓存中读取文件并返回Status Code: 200 OK
// 协商缓存: 向服务器发送请求,服务器会根据这个请求的request header的一些参数来判断是否命中协商缓存,如果命中,则返回304状态码并带上新的response header通知浏览器从缓存中读取资源;
// 协商缓存 协商缓存是要走服务端的,如果请求某个资源,去请求服务端时,发现命中缓存则返回304,否则则返回所请求的资源
// Last-Modified,If-Modified-Since 比较最后一次修改时间进行比较 ,来确定资源是否修改了
// Etag,If-None-Match 对比资源内容,来确定资源是否修改
// 那我们要怎么比对资源内容呢?我们只需要读取资源内容,转成hash值,前后进行比对就行了!!