这是一道面试中经常被问的题目,这里现在做个总结,到底发生了什么
- 浏览器输入URL
http://www.baidu.com
- 本地DNS缓存
浏览器会首先查找是否被本地DNS缓存,如果缓存则直接返回ip
- 本机 hosts 文件是否有配置 ip 地址(也就是代理)
如果没有缓存你的 URL 地址,浏览器就会发起系统调用来查询本机 hosts 文件是否有配置 ip 地址,如果找到,直接返回
- 发起一个 DNS 查询
首先,查询请求会先找到本地 DNS 服务器来查询是否包含 IP 地址,如果本地 DNS 无法查询到目标 IP 地址,就会向根域名服务器发起一个 DNS 查询。
在由根域名服务器 -> 顶级域名服务器 -> 权威 DNS 服务器后,由权威服务器告诉本地服务器目标 IP 地址,再有本地 DNS 服务器告诉用户需要访问的 IP 地址。
- 建立 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。
简单点理解
向服务器发起连接 -> 服务器请求响应 -> 本地确认连接
之后就可以通话/交换消息
- 发起GET请求
在建立连接后,浏览器会向目标服务器发起
HTTP-GET
请求
- 返回页面或者重定向
如果目标服务器只是一个简单的页面,就会直接返回。但是对于某些大型网站的站点,往往不会直接返回主机名所在的页面,而会直接重定向。返回的状态码就不是 200 ,而是 301,302 以 3 开头的重定向码,浏览器在获取了重定向响应后,在响应报文中 Location 项找到重定向地址,浏览器重新第一步访问即可。
总结
输入url -> 发起DNS请求获取ip地址 -> TCP3次握手 -> 发起get请求 ->服务器重定向或者直接返回页面