-
Notifications
You must be signed in to change notification settings - Fork 639
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
介绍一下浏览器缓存策略 #150
Comments
浏览器缓存分为强缓存和协商缓存 强缓存规则
协商缓存
|
浏览器缓存按照请求的优先级顺序包括以下四个阶段:Mermory Cache、Service Worker Cache、HTTP Cache、Push Cache。其中最常用的是HTTP Cache。 HTTP CacheHTTP Cache 又可以称为 Disk Cache,因为缓存是存储在硬盘上的。HTTP 缓存又可以分为强制缓存和协商缓存。 强制缓存强制缓存的意思就是,如果判定缓存有效,就不再请求服务器,而是直接读取本地硬盘缓存内容,因此不会发起网络请求,状态码显示为200。控制强制缓存的有以下两个头部字段: ExpireExpire是 HTTP 1.0 时期的字段,表示资源过期时间。当用户当前时间早于Expire设置的时间,则不再请求服务器,否则请求。Expire有一个缺陷,就是用户设备时间不靠谱,可能被篡改。 Catche-ControlCatche-Control 是HTTP 1.1新增的字段,可配置性更强。包括以下属性:
协商缓存Last-Modified/If-Modified-SinceLast-Modified 表示资源上次修改时间,当请求头If-Modified-Since中的值不等于资源当前值,则未命中,返回资源,状态码200;如果命中缓存,则响应体为空,状态码304; Etag/If-None-MatchEtag 是指文件的一个标识,一般采用某种算法(如MD5)计算出一个唯一标识,当文件修改时,改唯一标识就会改变。第一次请求时,响应头中包含 Etag 响应头,后续再次请求该资源时,会携带 If-None-Match 请求头,服务器判断 If-None-Match 和 文件当前 Etag 值是否相等,相等则命中缓存,返回 304;否则返回 200; Etag 的优先级高于 Last-Modified Mermory CacheMermory Cache 指存储在内存中的换粗,它的特点就是存储时间短、资源小。通常的场景是,网页中多次引用同一张图片,那么只会请求一次。当页面退出,缓存即失效。至于哪些资源会被缓存进内存,不同浏览器策略不同。 Service Worker CacheService Worker 是一个独立于主线程之外的一个独立线程,需要编写 JS 脚本去控制缓存哪些资源。Service Worker 缓存未命中,才会进行进入 HTTP 缓存的判断。 Push CacheHTTP2 才有。得益于 HTTP2 的多路复用、服务端推送等特性。Push Cache 是会话级别的缓存,会话结束,缓存失效。 |
浏览器缓存机制分析及实际应用.pptx
The text was updated successfully, but these errors were encountered: