写下这篇文章留个记念,各位前端的小伙伴也能够作个参考,也期待大家的补充。前端
问:从输入URL到页面加载完成是一个怎样的过程?web
答:服务器启动好监听服务,准备迎接来自客户机的请求,ajax
当咱们开始在浏览器中输入网址的时候,浏览器其实已经开始在智能的匹配可能获得的URL了,他会从历史记录、书签等地方,找到已经输入的字符串可能对应的URL,而后给出智能的提示,对于Google chrome这种聪明的浏览器,他甚至会直接从缓存中把网页展现出来,也就是说在你尚未戳下enter键的时候,页面就已经展现在你面前了,详细状况先不解释。chrome
导航的第一步是找出访问域的IP地址,DNS查找过程以下:浏览器
。浏览器缓存:浏览器缓存DNS记录一段时间,然而操做系统并无告诉浏览器每一个DNS记录的生存时间,所以浏览器会将其缓存一段固定的时间(通常在2到30分钟之间)缓存
。操做系统缓存:若是浏览器缓存不包含所需的记录,则浏览器进行系统调用(Windows中的gethostbyname)。操做系统有本身的缓存。服务器
。路由器缓存:请求继续到您的路由器,路由器一般具备本身的DNS缓存。并发
。ISP DNS缓存:检查的下一个是ISP的DNS缓存,这里天然也会有一个缓存。异步
。递归搜索:ISP的DNS服务器开始递归搜索,从根名称服务器经过.com顶级名称服务器到Facebook的名称服务器。一般来说,DNS服务器将在缓存中具备.com名称服务器的名称,所以对根名称的服务器的命中是没必要要的(不太明白。。。。)spa
通常网页的动态主页不会存在于缓存中,由于动态页面都会有一个很是短暂的时间设为过时时间,所以浏览器会将此请求发往服务器,get请求命名要提取本身的URL(例如:http://baidu.com),浏览器识别本身的请求头,并说明本身接受哪一类类型的响应等
服务器收到请求后开始响应,将http://baidu.com重定向到 http://www.baidu.com
浏览器知道http://www.baidu.com是正确的URL,所以它会发出另外一个get请求
服务器将受到get请求,处理它并发送回应
服务器生成并发回响应,包含响应头,响应正文,缓存时间信息,以及其余信息