谈谈浏览器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会忽略。
注意,强缓存有效的前提下,不会发送请求到服务器,也就是说,不会有协商缓存什么事情。

参考:
http://www.cnblogs.com/vajoy/p/5341664.html#3800753

原文地址:https://www.cnblogs.com/bhaltair/p/tan-tan-liu-lan-qihttp-huan-cun.html