谈谈浏览器http缓存
最近面试,被问到了HTTP的相关知识,深知自己的不足,于是恶补了一下。
请求头的字段
user-agent
pragma
Cache-control
Referer
Accept
Cookit
If-Modified-Since
If-None-Match
响应头的字段
content-type
Date
ETag
Last-Modefied
Age
Cache-Control
Access-Control-Allow-Origin
Etag
如果配置了Etag,在第一次请求的时候,响应头会下发ETag属性,再下一次请求,会带上If-None-Match,如果服务端没有匹配的ETag,返回200和新的ETag。如果有匹配的Etag,返回304请求。
缓存的种类
强缓存和协商缓存
新鲜度和有效性
强缓存用Cache-Control、Expires、Pragma来控制,如果在有效期内不会发任何请求到服务器
协商缓存用ETag、Last-Modified、If-None-Match、If-Modified-Since来控制,特点是会发一个请求来确认缓存是否有效,如果有效就返回304,省去传输内容的时间。
如果浏览器发起一个请求,发现本地的资源已经过期,则会附加一个If-None-Match
注意,按F5刷新浏览器,会忽略Cache-Control和Expires
强缓存
如果同时设置了Cache-Control和Expires,Expires会忽略。
注意,强缓存有效的前提下,不会发送请求到服务器,也就是说,不会有协商缓存什么事情。