乐趣区

关于java:面试突击72输入URL之后会执行什么流程

在浏览器中输出 URL 之后,它会执行以下几个流程:

  1. 执行 DNS 域名解析;
  2. 封装 HTTP 申请数据包;
  3. 封装 TCP 申请数据包;
  4. 建设 TCP 连贯(3 次握手);
  5. 参数从客户端传递到服务器端;
  6. 服务器端失去客户端参数之后,进行相应的业务解决,再将后果封装成 HTTP 包,返回给客户端;
  7. 服务器端和客户端的交互实现,断开 TCP 连贯(4 次挥手);
  8. 浏览器通过本身执行引擎,渲染并展现最终后果给用户。

1.DNS 域名解析

在网络中定位是依附 IP 进行身份定位的,所以 URL 拜访的第一步便是先要失去服务器端的 IP 地址。而失去服务器的 IP 地址须要应用 DNS(Domain Name System,域名零碎)域名解析,DNS 域名解析就是通过 URL 找到与之绝对应的 IP 地址。

PS:为什么不间接拜访 IP 地址来申请服务器?因为 IP 地址很长,不不便记忆,而 URL 地址好记很多,所以会应用 URL 来代替 IP 地址,而 URL 就像 IP 地址的别名一样,用它能够定位到相应的 IP 地址。

DNS 域名解析的大抵流程如下:

  1. 先检 查浏览器中的 DNS 缓存,如果浏览器中有对应的记录会间接应用,并实现解析;
  2. 如果浏览器没有缓存,那就去 查问操作系统的缓存,如果查问到记录就能够间接返回 IP 地址,实现解析;
  3. 如果操作系统没有 DNS 缓存,就会去 查看本地 host 文件,Windows 操作系统下,host 文件个别位于 “C:\Windows\System32\drivers\etc\hosts”,如果 host 文件有记录则间接应用;
  4. 如果本地 host 文件没有相应的记录,会 申请本地 DNS 服务器,本地 DNS 服务器个别是由本地网络服务商如挪动、电信提供。通常状况下可通过 DHCP 主动调配,当然你也能够本人手动配置。目前用的比拟多的是谷歌提供的专用 DNS 是 8.8.8.8 和国内的专用 DNS 是 114.114.114.114。
  5. 如果本地 DNS 服务器没有相应的记录,就会 去根域名服务器查问 了,目前寰球一共有 13 组根域名服务器(这里并不是指 13 台服务器,是指 13 个 ip 地址,按字母 a-m 编号),为了能更高效实现寰球所有域名的解析申请,根域名服务器自身并不会间接去解析域名,而是会把不同的解析申请调配给上面的其余服务器去实现,上面是 DNS 域名零碎的树状结构图:

2. 封装 HTTP 申请数据包

一个 HTTP 申请对象蕴含 4 局部内容:

  1. 申请行
  2. 申请报头
  3. 空行
  4. 申请注释

它的根本格局如下:

在失去了服务器 IP 之后,紧接着会将本地的申请封装成一个 HTTP 数据包,如上图所示。

3. 封装 TCP 申请数据包

HTTP 底层是依赖 TCP/IP 协定实现的,所以在底层数据传输时,会将 HTTP 申请包进一步封装成 TCP 数据包。

4. 建设 TCP 连贯(3 次握手)

HTTP 通信的根底是 TCP 连贯,TCP 连贯须要 3 次握手,3 次握手就是为了验证客户端的发送能力和接管能力,以及服务器端的产生能力和接管能力,就像打电话一样,通常的通话是这样结尾的:

  1. _我_:喂,能听到吗?
  2. _对方_:能听到,你能听到吗?(证实了对方的接管能力和我的发送能力)
  3. _我_:我也能听到,咱们聊闲事吧。(证实了对方的发送能力和我的接管能力)

通过以上 3 次握手就能够证实客户端的发送能力和接管能力,以及服务器端的产生能力和接管能力,这样就能够正式开始通信了。

5. 服务器端获取到 HTTP 申请参数

数据在通过 TCP 传到到服务器程序之后,又会将 TCP 的数据包转换成 HTTP 数据包(这一切都是 TCP/IP 协定的功绩),这样服务器端就能够失去客户端发送的申请数据了。

6. 服务器端执行业务解决,并返回数据

服务器端拿到了客户端的申请参数之后,会进行相应的业务解决,解决实现之后,再将解决的后果返回给客户端。返回的流程和发送的流程相似,先将后果封装成 HTTP 数据包,HTTP 数据包可分为以下 4 局部:

  1. 状态行
  2. 响应报头
  3. 空行
  4. 响应注释

它的根本格局如下:

状态行用于形容服务器的返回状态,它由 3 局部组成:

  1. HTTP 版本号,如 HTTP/1.1;
  2. 状态码,如 200;
  3. 状态形容信息,如 OK;

常见的状态码有以下几个:

  • 200:返回胜利;
  • 301:永恒重定向;
  • 302:长期重定向;
  • 404:未找到页面;
  • 500:服务器程序出错。

响应注释就是返回给客户端的所有数据。

7. 断开 TCP 连贯(4 次挥手)

在通过一次申请和一次响应之后,客户端和服务器的“交换”就完结了,此时就能够执行 TCP 连贯断开的流程了,它须要 4 次挥手:

  • _客户端_:咱们离别吧;
  • _服务器端_:好的,让我筹备一下。
  • _服务器端_:我筹备好了,离别吧。
  • _客户端_:好的。

通过了以上流程之后,TCP 的连贯就断开了。

8. 浏览器渲染并展现后果

通过 TCP 交互之后,客户端也失去了服务器端返回的数据,而后应用浏览器本身的执行引擎,将最终的后果展现给用户,整个执行流程就完结了。

参考 & 鸣谢

zhuanlan.zhihu.com/p/58108010

是非审之于己,毁誉听之于人,得失安之于数。

公众号:Java 面试真题解析

面试合集:https://gitee.com/mydb/interview

退出移动版