1.什么是浏览器缓存?浏览器通常会在您的PC磁盘和内存中缓存经常使用的资源。例如Chrome浏览器的缓存存放位置在\Users\Your_Account\AppData\Local\Google\Chrome\UserData\Default中的Cache文件夹和MediaCache文件夹。2、什么是静态资源服务器?一般的网站,静态资源使用频率高,流量占用大。对于访问量比较大的网站,静态资源会放在CDN服务器上,不会占用业务服务器的网络带宽,达到更好的用户体验。3、浏览器请求静态资源的过程对于前端开发者来说,我们主要是处理浏览器中的缓存。上图中的流程是一个简化版;事实上,在实际应用中通常使用静态资源服务器(CDN)。4、浏览器端缓存的分类下图是一个网站对不同资源的请求结果。可以看到有的资源是直接从缓存中读取的,有的资源是和服务器重新认证过的,有的资源是从服务器重新获取的。200fromcache304notmodified请注意,我们讨论的关于缓存资源的所有问题仅针对GET请求。对于POST、DELETE和PUT等行为操作,通常没有缓存。5、Cache-Control和ExpiresCache-Control是HTTP1.1中新增的响应头。Expires是HTTP1.0中的一个响应头。Cache-Control使用相对时间。Expires指定特定的到期日期而不是秒数。因为很多服务器和客户端存在时钟不一致的情况,所以最好使用Cache-Control。如果同时使用Cache-Control和Expires,Cache-Control会覆盖Expires6。Cache-Control可以设置哪些属性max-age(单位是s)指定设置缓存***的有效时间,定义了时间长度。浏览器向服务器发送请求后,浏览器在max-age时间内不会再向服务器发送请求。public指定响应可以缓存在代理缓存中,因此可以由多个用户共享。如果未明确指定私有,则默认为公共。私有响应只能缓存在私有缓存中,不能缓存在代理缓存中。对某些用户信息敏感的资源通常需要设置为私有。no-cache的意思是首先要和服务器确认资源是否发生变化(取决于If-None-Match和Etag),然后再决定是否使用本地缓存。no-store绝对禁止缓存任何资源,也就是说用户每请求一个资源,都会向服务器发送一个请求,每次都会下载完整的资源。通常用于机密资源。关于Cache-Control的使用,见下图7。新鲜度限制HTTP通过缓存在一段时间内保留一份服务器资源副本,这段时间称为新鲜度限制。这个对同一个资源的请求在一段时间内不会再经过服务器。HTTP协议中的Cache-Control和Expires可以用来设置新鲜度限制。前者是HTTP1.1中新增的响应头,后者是HTTP1.0中的响应头。两者做的是一样的,但是因为Cache-Control使用的是相对时间,而Expires可能会存在客户端和服务端时间不同的问题,所以我们更倾向于选择Cache-Control。html代码
