浏览器缓存

第一次请求资源,服务端会通知客户端怎么缓存数据,强缓存和协商缓存

强缓存

expires缓存过期的绝对时间,缺点客户端时间可能不准确,于是http1.1版本增加了

cache-control又有下面几种字段设置,和expires同时出现,cache-control优先级高于expires

max-age:1000  表示从资源被缓存算起1000ms以内再请求的话就会命中

no-cache:先不使用缓存,通过服务器协商后确定,注:不是不使用缓存

no-store:直接请求不用缓存

public:允许cdn缓存信息

private:只允许客户缓存信息,cdn不缓存

协商缓存

last-modified/if-modified-since              Sun, 17 Dec 2017 20:47:08 GMT

上一次response.header中会包含last-modified文件最后修改的时间xx

后续请求requset.header.if-modified-since的值为xx,

服务端通过对比修改时间决定,如果没变就返回304 not modified告诉客户端使用缓存,否则返回内容且会更新last-modified值

缺点:有些文件修改过,但是内容没有发生变化,比如自动生成之类的操作,另外时间只能精确到秒级,如果修改操作是在ms级的就不行了,如果客户端缓存文件同样出问题

于是有了

etag/if-none-match

etag跟webpack的chunkhash类似,只要内容变了,这个值就会变,检查的路子跟上面modified一样

优先级:etag>last-modified,etag如果相同,还要继续通过modified确定

缓存失效

crtl+f5,f5只能让expires/cache-control失效

 

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注