数据库缓存、服务器端缓存(代理服务器缓存、CDN 缓存)、浏览器缓存css
HTTP 缓存、indexDB、cookie、localstorage 等等html
Expiresnode
Cache-Control算法
由多个字段组合而成数据库
浏览器第一次请求数据以后会将数据和响应头部的缓存标识存储起来。再次请求时会带上存储的头部字段,服务器端验证是否可用。若是返回 304 Not Modified,表明资源没有发生改变可使用缓存的数据,获取新的过时时间。反之返回 200 就至关于从新请求了一遍资源并替换旧资源浏览器
Last-modified(响应头)/If-Modified-Since(请求头)缓存
Etag/If-None-Match:服务器
last-modified 和 Etag 区别cookie
一、在URI输入栏中输入而后回车工具
200 OK (from cache)
,浏览器发现该资源已经缓存了并且没有过时(经过Expires头部或者Cache-Control头部),没有跟服务器确认,而是直接使用了浏览器缓存的内容。其中响应内容和以前的响应内容如出一辙
二、F5/点击工具栏中的刷新按钮/右键菜单从新加载
不管如何都发一个HTTP Request给Server,即便先前的响应中有Expires头部
Cache-Control: max-age=0 // Chrome强制加上的 If-Modified-Since: Fri, 15 Jul 2016 04:11:51 GMT
三、Ctl+F5
完全的从Server拿一份新的资源过来
还须要添加一些HTTP Headers。按照HTTP/1.1协议,Cache不光只是存在Browser终端,从Browser到Server之间的中间节点(好比Proxy)也可能扮演Cache的做用
在Chrome 51 中会包含两个头部信息, 做用就是让中间的Cache对这个请求失效,这样返回的绝对是新鲜的资源。
Cache-Control: no-cache Pragma: no-cache Cache-Control: no-cache
etag
,那么资源下次请求时就会把值加入到请求头 if-none-match
中last-modified
,那么资源下次请求时就会把值加入到请求头 if-modified-since
中补充:协商缓存在node的实现