高频面试题-在浏览器中输入URL会发生什么

1,429 阅读2分钟

本文正在参与 “网络协议必知必会”征文活动

前言

首先祭出一张某位国外大佬画的图 在浏览器中输入URL会发生什么.jpg

这张图的流程其实已经通俗易懂的的讲解了在浏览器中输入URL会发生什么,接下来详细分析一下

分析

1.在浏览器中输入网址

  • 例如在浏览器中输入www.baidu.com

2.浏览器解析域名

  • 查找本地hosts文件是否有规则
  • 无hosts规则发出DNS请求(本地) 图片.png
  • 有缓存返回,无缓存本地DNS向根DNS服务器进行查询

图片.png

  • 根DNS告诉本地DNS域名,本地DNS向域服务器发出请求,返回域名解析服务器地址
  • 本地DNS向域名解析服务器发出请求,返回域名和IP对应关系。将IP返回给用户,对应关系保存在缓存中,下次查询直接返回缓存

3.建立TCP连接

  • 本地随机端口(1024-65536)向服务器80端口发起TCP连接请求,请求进入内核TCP/IP协议栈,防火墙,最终到达WEB程序
  • 建立连接 三次握手

图片.png

  1. 客户端发送信息SYN(你好!我想和你聊一聊)
  2. 服务端确认信息SYN/ACK(好的,我有空)
  3. 客户端回传ACK握手结束(好的,我们开始吧)

4.浏览器发起HTTP请求

  • 请求方法 GET POST PUT DELETE OPTION ...
  • 请求头
  • 请求正文

图片.png

5.服务端处理

  • web服务器处理请求
  • 调用相应的资源并返回给客户端
  • HTTP状态码(将在其他篇章进行讲解) 图片.png

6.浏览器处理资源

  • 解析HTML生成DOM树
  • 解析CSS生成CSS规则树,共同生成渲染树
  • GPU绘制显示,最终展示在浏览器中
    • repaint: 部分重绘
    • reflow: 全部重绘

7.关闭TCP连接 四次挥手

图片.png

  1. 客户端发送信息FIN
  2. 服务端接收返回ACK,等待是否未完成传输
  3. 服务端所有传输结束返回FIN
  4. 客户端返回ACK关闭TCP连接

一句话总结

在浏览器中输入URL => 进行DNS查询,得到资源地址 => 建立TCP链接(三次握手)=> 发送HTTP请求 => 服务端处理资源返回给前端 => 浏览器解析资源并绘制在页面上 => 关闭TCP连接(四次挥手)