地址栏输入 URL 发生了什么

这是一道面试中经常被问的题目,这里现在做个总结,到底发生了什么

  1. 浏览器输入URL

http://www.baidu.com

  1. 本地DNS缓存

浏览器会首先查找是否被本地DNS缓存,如果缓存则直接返回ip

  1. 本机 hosts 文件是否有配置 ip 地址(也就是代理)

如果没有缓存你的 URL 地址,浏览器就会发起系统调用来查询本机 hosts 文件是否有配置 ip 地址,如果找到,直接返回

  1. 发起一个 DNS 查询

首先,查询请求会先找到本地 DNS 服务器来查询是否包含 IP 地址,如果本地 DNS 无法查询到目标 IP 地址,就会向根域名服务器发起一个 DNS 查询。

在由根域名服务器 -> 顶级域名服务器 -> 权威 DNS 服务器后,由权威服务器告诉本地服务器目标 IP 地址,再有本地 DNS 服务器告诉用户需要访问的 IP 地址。

  1. 建立 TCP 连接

浏览器需要和目标服务器建立 TCP 连接,需要经过三次握手的过程

SYN:它的全称是 Synchronize Sequence Numbers,同步序列编号。是 TCP/IP 建立连接时使用的握手信号。在客户机和服务器之间建立 TCP 连接时,首先会发送的一个信号。客户端在接受到 SYN 消息时,就会在自己的段内生成一个随机值 X。

SYN-ACK:服务器收到 SYN 后,打开客户端连接,发送一个 SYN-ACK 作为答复。确认号设置为比接收到的序列号多一个,即 X + 1,服务器为数据包选择的序列号是另一个随机数 Y。

ACK:Acknowledge character, 确认字符,表示发来的数据已确认接收无误。最后,客户端将 ACK 发送给服务器。序列号被设置为所接收的确认值即 Y + 1。

简单点理解

向服务器发起连接 -> 服务器请求响应 -> 本地确认连接 之后就可以通话/交换消息

  1. 发起GET请求

在建立连接后,浏览器会向目标服务器发起 HTTP-GET 请求

  1. 返回页面或者重定向

如果目标服务器只是一个简单的页面,就会直接返回。但是对于某些大型网站的站点,往往不会直接返回主机名所在的页面,而会直接重定向。返回的状态码就不是 200 ,而是 301,302 以 3 开头的重定向码,浏览器在获取了重定向响应后,在响应报文中 Location 项找到重定向地址,浏览器重新第一步访问即可。

总结

输入url -> 发起DNS请求获取ip地址 -> TCP3次握手 -> 发起get请求 ->服务器重定向或者直接返回页面

你可能感兴趣的:(面试)