这是面试中一道非常经典的问题。
当你在浏览器中输入一个网址,浏览器的处理过程如下:
第一步 浏览器查找该域名的 IP 地址
第二步 浏览器根据解析得到的IP地址向 web 服务器发送一个 HTTP 请求
第三步 服务器收到请求并进行处理
第四步 服务器返回一个响应
第五步 浏览器对该响应进行解码,渲染显示。
第六步 页面显示完成后,浏览器发送异步请求。
复制代码
下面对每个环节做进一步分析:
01 浏览器查找该域名的 IP 地址
浏览器缓存 首先是查找浏览器缓存,浏览器会缓存DNS记录一段时间,不同浏览器保存的时常不等(2分钟到30分钟不等)。
系统缓存 如果在浏览器缓存里没有找到需要的记录,浏览器会做一个系统调用来查找这个网址的对应DNS信息。
路由器缓存 如果在系统缓存里没有找到找到对应的IP,请求会发向路由器,它一般会有自己的DNS缓存。
ISP DNS服务器 如果在路由器缓存里还是没有对应的IP,请求会被发送到ISP。
根域名服务器 如果还是没有,请求将发向根域名服务器进行搜索。找不到就说明此域名不存在。
02 浏览器根据解析得到的IP地址向 web 服务器发送一个 HTTP 请求
可能会重定向响应
例如“http://facebook.com/”,服务器会给浏览器响应一个301永久重定向响应,这样浏览器就会访问“http://www.facebook.com/” 而非“http://facebook.com/”。
服务器重定向的原因有很多,举其中两个