-
Notifications
You must be signed in to change notification settings - Fork 890
New issue
Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? # to your account
Day110:客户端缓存有几种方式?浏览器出现 from disk、from memory 的策略是啥 #923
Comments
一、客户端缓存浏览器缓存策略: 浏览器每次发起请求时,先在本地缓存中查找结果以及缓存标识,根据缓存标识来判断是否使用本地缓存。如果缓存有效,则使用本地缓存;否则,则向服务器发起请求并携带缓存标识。根据是否需向服务器发起HTTP请求,将缓存过程划分为两个部分:强制缓存和协商缓存,强缓优先于协商缓存。 HTTP缓存都是从第二次请求开始的
1.强缓存服务器通知浏览器一个缓存时间,在缓存时间内,下次请求,直接用缓存,不在时间内,执行比较缓存策略。 强缓存命中则直接读取浏览器本地的资源,在network中显示的是from memory或者from disk 控制强制缓存的字段有:Cache-Control(http1.1)和Expires(http1.0)
1)强缓存-expires 该字段是服务器响应消息头字段,告诉浏览器在过期时间之前可以直接从浏览器缓存中存取数据。 Expires 是 HTTP 1.0 的字段,表示缓存到期时间,是一个绝对的时间 (当前时间+缓存时间)。在响应消息头中,设置这个字段之后,就可以告诉浏览器,在未过期之前不需要再次请求。 由于是绝对时间,用户可能会将客户端本地的时间进行修改,而导致浏览器判断缓存失效,重新请求该资源。此外,即使不考虑修改,时差或者误差等因素也可能造成客户端与服务端的时间不一致,致使缓存失效。 优势特点:
劣势问题:
2)强缓存-cache-control 已知Expires的缺点之后,在HTTP/1.1中,增加了一个字段Cache-control,该字段表示资源缓存的最大有效时间,在该时间内,客户端不需要向服务器发送请求。 这两者的区别就是前者是绝对时间,而后者是相对时间。下面列举一些
Cache-control 的优先级高于 Expires,为了兼容 HTTP/1.0 和 HTTP/1.1,实际项目中两个字段都可以设置。 该字段可以在请求头或者响应头设置,可组合使用多种指令:
优势特点:
劣势问题:
2.协商缓存让客户端与服务器之间能实现缓存文件是否更新的验证、提升缓存的复用率,将缓存信息中的Etag和Last-Modified通过请求发送给服务器,由服务器校验,返回304状态码时,浏览器直接使用缓存。
1)协商缓存-协商缓存-Last-Modified/If-Modified-since
优势特点:
劣势问题:
2)协商缓存-Etag/If-None-match
优势特点:
劣势问题:
二、浏览器出现 from disk、from memory 的策略强缓存:服务器通知浏览器一个缓存时间,在缓存时间内,下次请求,直接用缓存,不在时间内,执行其他缓存策略
|
扫描下方二维码,收藏关注,及时获取答案以及详细解析,同时可解锁800+道前端面试题。
The text was updated successfully, but these errors were encountered: