本文的目标是以“输入 URL 后产生了什么”这个经典面试题为引子,写一篇既可以或许涵盖面试中大年夜部分收集试题,又可以或许将“输入 URL 后产生什么”讲得有深度的文┞仿。以前写过一篇类似的文┞仿,但实袈溱过于简单。别的,HTTPS 逐渐普及,文┞仿中没有这部分过程也说不以前。不想修改本来的文┞仿,就从新写一篇吧。文中以我地点的项目“兴趣部落”的官网 https://buluo.qq.com/index.html 为例子。
生成 HTTP 请求消息
解析完要拜访的目标办事器是啥了,接下来浏览器就会用 HTTP 协定生成请求消息去 web办事器请求资本,消息格局如下:
TCP 连接

请求信息重要包含:
- 请求行:请求的办法(POST/GET/…)、URL、HTTP版本(1.1/2);
- 消息头:请求的附加信息,以空行停止;
- 消息体:数据,比如 POST 请求时的表单数据。
对应的,响应消息也有 3 个部分构成:
- 状况行:HTTP版本、状况码(200/304/404/…)、解释状况的响应短语;
- 消息头
- 消息体:返回的数据。
用图表示:

DNS
生成 HTTP 消息后,浏览器宛转操作体系将消息发送给 web办事器。而经由过程 web办事器的名称是没法找到办事器在哪的,比如知道一小我的名字没法找到他家在哪一样,收集中的地址是用 IP 地址表示的,所以要想跟办事器通信,得先找到它的 IP 地址,应用 DNS(Domain Name System,域名办事体系) 办事器可以将 web办事器名称转换成 IP 地址。那这个过程是如何的呢?
起首介绍下操作体系中 DNS 解析器发送给 DNS 办事器的消息内容,消息中包含 1)域名:buluo.qq.com;2)Class: IN,代表当前的收集是因特网,DNS 设计之初还推敲了其他收集,固然如今只有互联网,但这个字段照样保存了下来;3)记录类型:A,表示域名对应的是 IP 地址,因为 DNS 还能解析其他地址,比如类型为 MX 时 DNS 办事器会萌芽邮件办事器地址。DNS 办事器中保护一张表,表的每一项包含膳绫擎庞个字段还有办事器地址,当域名、Class、记录类型全部匹配时,DNS 办事器返回地址,在例子中会返回兴趣部落首页的 IP 地址。
但这个时刻问题来了,世界上有弗成胜数的办事器,将这些所有的办事器信息都保存在一个 DNS 的表中肯定是不实际的,所以肯定有很多台 DNS 办事器一路合营完成这个域名解析过程的,那具体过程是什么样的呢?
起首,DNS 办事器中的所有信息都是按照域名来划分层次的,这个层次是用 . 来分隔的,越靠右层次越高,比如 “buluo.qq.com” 中 “com” 层次最高,“qq” 次之,“buluo” 最后,个中每一层都被称为“域”,比如 “com 域”下是 “qq” 域,再下是 “buluo” 域,域的层次划分是为了更好地分派给不合国度、公司和组织等,典范的例子像南京市当局的官网:“www.nanjing.gov.cn”,“cn” 代表中国这个国度的域,“gov” 代表这个国度下的┞服府组织,“nanjing” 代表南京市当局。域有层次之分,那 DNS 办事器呢?规定将治理下级域的 DNS 办事器的 IP地址注册到上级的 DNS 办事器中,比如治理 “buluo.qq.com” 这个域的 DNS 办事器的 IP地址须要注册到 “qq.com” 域的 DNS 办事器中,以词攀类推,一向到“根域”,就是 “cn”、“com” 这类域的上一层次,根域中就保存了 “cn”、“com” 等域名的 DNS 办事器信息。此外,还须要将根域的 DNS 办事器信息保存在所有的 DNS 办事器中,如许只要找到一台 DNS 办事器就可以顺藤摸瓜找到基层任何一个 DNS 办事器。知道了域的层次划分以及 DNS 办事器的分布,下面就正式介绍若何寻找到响应的 DNS 办事器并获取 IP 地址。
起首,客户端会拜访比来的一台 DNS 办事器,但因为这台 DNS 办事器膳绫腔有 “buluo.qq.com” 这个域名的对应的信息,所以就向根域 DNS 办事器发请求询问,但根域中也没有,但剖断则个域名是属于 “com” 域的,所以就返回其治理的 “com” 域的 DNS 办事器的 IP 地址,意思是“固然我不知道,但你可以去某某处问问,他应当知道”。然后 比来的那个 DNS 办事器又向 “com” 域的 DNS 办事器发请求,同理,也不知道,然后返回 “qq.com” 域的 DNS 办事器,然后这台比来的 DNS 办事器又向 “qq.com” 域 DNS 办事器发请求,仍然没有,直到最后,向 “buluo.qq.com” 这个域下的 DNS 办事器发请求才拿到 IP 地址。接着,这台比来的 DNS 办事器将获得的 “buluo.qq.com” 的 IP 地址返回给客户端,客户端再拿着这个 IP 地址去请求资本。以上的过程用图表示如下:

以上就是经由过程 DNS 办事获取目标办事器 IP 地址的过程,可以说是异常耗时,为了优化机能,DNS 办事器会对中心的萌芽结不雅做个缓存,为了保存缓存的及时性,每隔一段时光就会精华存设为过时。
如今客户端拿到了目标办事器的 IP 地址,下面就要与其连接并发送消息了,这个过程同样不是浏览器做的,而是宛转协定栈来完成的,具体过程是:

网友点评
精彩导读
科技快报
品牌展示