1.缓存分类
web缓存可以分为很多种,如数据库缓存、服务器缓存、CDN缓存、HTTP缓存等。
HTTP缓存是用于临时存储Web文档(HTML页面和图像),以减少服务器延迟的一种信息技术。使用的好处:
- 使网页加载和呈现速度更快。
- 由于减少了不必要的数据传输,因而可以节省网络流量和带宽。
- 减少服务器的负担。
浏览器缓存按位置可分为:内存缓存(memory cache)、硬盘缓存(disk cache)、service worker等。
浏览器的资源缓存可分为硬盘缓存和内存缓存两类。当首次访问网页时,资源文件被缓存在内存中,同时也会在本地磁盘中保留一份副本。当用户刷新页面时,如果缓存的资源没有过期,就可以直接从内存中读取数据并加载。当用户关闭页面后,当前页面缓存在内存中的资源就会被清空。当用户再一次访问页面时,如果资源文件的缓存没有过期,就可以从本地磁盘加载数据并再次缓存到内存中。
按策略分,可分为:强缓存、协商缓存。
缓存的核心就是解决什么时候使用缓存,什么时候更新缓存的问题。
2.强缓存和协商缓存
强缓存:浏览器直接从本地缓存中获取数据,不与服务器进行交互。200(from cache)
协商缓存:浏览器发送请求到服务器,服务器判断是否可使用本地缓存。304(not modified)
- 强缓存优先级最高,并且在缓存有效期内浏览器不会因为资源改动而发送请求,适用于大型且不易修改的资源文件,例如:第三方的CSS、JS文件或图片资源。如果想提高缓存的灵活性,也可以为文件名加上hash表示进行版本的区分。
- 协商缓存灵活性高,适用于数据的缓存,考虑将数据缓存在内存中,加载速度最快并且体积小。
强制刷新时,浏览器会直接从服务器加载网页信息,跳过强缓存和协商缓存;浏览器刷新时,会跳过强缓存,但仍会进行协商缓存;其他情况两者都有效,如:页面跳转、新开窗口、前进后退。
3.相关问题
- 禁止浏览器不缓存静态资源
使用Chrome隐私模式,在请求头设置
Cache-control:no-cache, no-store, must-revalidate
也可以在meta标签中设置
<meta http-equiv="Cache-Control" content="no-cache, no-store, must-revalidate" />
- max-age=60, must-revalidate 请求/响应头有什么效果
如果资源在60s内会再次被访问,那么根据强缓存机制可以直接返回缓存资源内容;如果出超过60s,则必须发送网络请求到服务端,以验证资源的有效性。