在浏览器输入网址发生的几种缓存:
1、dns缓存
2、本地缓存(memory)
3、http缓存
4、服务端缓存
一、DNS缓存
我们所用的网址一般是一个域名,通过这个域名,解析出对应的ip地址就是dns解析的过程。在解析后将获得的ip地址缓存起来,当下一次再有相同域名的请求时,先从浏览器自身的dns缓存进行查找,如果缓存有效,会直接返回ip地址,如果找不到,则继续读取操作系统hosts文件看是否存在映射关系,如果存在,解析结束,如果不存在,继续在本地dns服务器中查找,如果还找不到,会向根服务器发出请求,进行递归查找。
三、本地缓存
不受开发者控制,当资源被放入内存后,下次请求,将不再通过网络,而是直接从内存读取
memory cache 机制保证了一个页面中如果有两个相同的请求,只会请求一次。
四、HTTP缓存(硬盘缓存)
- 1、 http缓存机制
浏览器每次发起请求,都会在浏览器中查找该请求的结果与缓存标识。
浏览器每次拿到请求结果,都会把请求结果和缓存标识存入浏览器缓存。 - 2、http缓存分类。
- 强制缓存
通过Expires和Cache-Control来控制,Cache-Control优先级更高
Cache-Control取值
(1)public:所有内容都将被缓存(客户端和代理服务器都可缓存)
(2)private:所有内容只有客户端可以缓存,Cache-Control的默认取值
(3)no-cache:客户端缓存内容,但是是否使用缓存则需要经过协商缓存来验证决定
(4)no-store:所有内容都不会被缓存,即不使用强制缓存,也不使用协商缓存
(5)max-age=xxx (xxx is numeric):缓存内容将在xxx秒后失效
示例:Cache-Control: public, max-age=3600表示这是一个公开资源,请缓存1个小时。 - 协商缓存
强制缓存失效后,会向服务器发起一个带有缓存的请求,由服务器根据缓存标识决定是否使用该缓存。
协商缓存生效,返回304,协商缓存失效,返回200和请求结果,同时可以附带上新的缓存指令,浏览器缓存新的内容。
If-Modified-Since:资源上次修改时间
If-None-Match:资源编号 优先级更高
网友评论