网页输入Url浏览器做了什么?

284 阅读3分钟

一、简答:

1.浏览器查询DNS解析当前URL对应的IP
2.建立TCP链接(三次握手)
3.浏览器发送HTTP请求
4.服务器收到请求并响应HTTP请求并返回报文
5.浏览器收到返回报文并执行渲染(DOM树.CSS树,Render-Tree,布局,重绘)
6.关闭TCP链接(四次挥手)

二、详细解答

1.DNS解析

一个IP地址对应一台服务器,一个域名可能对应多个IP,域名解析服务器会根据一定的规则分配给用户其中一个IP地址,例www.baidu.com(域名)=>DNS解析=>11.22.33.444(IP地址)

查找过程(DNS预解析)
  1. 浏览器缓存 中进行查找,如果无则下一步
  2. 系统缓存 中查找,如果无则下一步
  3. 路由器 中查找DNS缓存,如果无则下一步
  4. IPS(运行商)查找DNS缓存,如果无则下一步
  5. 根域名服务器 => 顶级域名服务器中查找
2.建立TCP链接/三次握手
  1. 客户端向服务端发消息(你好,我是客户端)
  2. 服务端回应(你好客户端 ,我是服务端,我能接收到你的消息)
  3. 客户端回应(你好服务端,你能接收我的消息,我也能接收到你的消息) 三次握手才能确认双向通信是正常的 三次握手四次挥手详答
3.浏览器发送HTTP请求和服务端响应请求

建立完TCP链接就要正式和服务器进行通信了

  1. 浏览器根据解析到的IP和端口号进行HTTP请求发送,一个HTTP请求一般包括header和body,header包括请求的方式(get,post),请求的协议 (http、https),请求的地址ip,缓存cookie,请求类型等,body则为我们请求的参数
  2. 服务器根据请求地址和请求参数返回给浏览器对应的请求报文
  3. get产生一个tcp数据包,post产生两个(get请求时直接发送header和data,post则先发送header,服务器返回100,再发送data,服务器再响应200和返回正文)
Status-Code(状态码)
  • 1xx: 指示消息, 收到请求,等待继续操作
  • 2xx: 成功 请求成功
  • 3xx: 重定向,要完成请求需要继续操作
  • 4xx: 客户端错误,连接服务端成功,但请求有语法错误或参数错误,跨域等,请求无法实现
  • 5xx: 服务端异常
4.浏览器渲染
浏览器拿到html文件后开始渲染页面,渲染顺序和规则:
  1. DOM: 解析HTML代码构造DOM树
  2. CSSOM:解析CSS代码构造CSSOM-CSS树
  3. Render-Tree: 结合DOM,CSSOM生成Render-Tree-渲染树
  4. 布局: 根据节点关系和CSS进行定位
  5. 绘制: 根据计算的好的信息绘制页面
5.四次挥手关闭Tcp连接
  1. 第一次挥手:Client 的应用进程先向其 TCP 发出连接释放报文段(FIN = 1,序号 seq = u),并停止再发送数据,主动关闭 TCP 连接,进入 FIN-WAIT-1(终止等待1)状态,等待 Server 的确认。

  2. 第二次挥手:Server 收到连接释放报文段后即发出确认报文段,(ACK = 1,确认号 ack = u + 1,序号 seq = v),Server 进入 CLOSE-WAIT(关闭等待)状态,此时的 TCP 处于半关闭状态,Client 到 Server 的连接释放。

  3. 第三次挥手:Server 已经没有要向 Client 发出的数据了,Server 发出连接释放报文段(FIN = 1,ACK = 1,序号 seq = w,确认号 ack = u + 1),Server 进入 LAST-ACK(最后确认)状态,等待 Client 的确认。

  4. 第四次挥手:Client 收到 Server 的连接释放报文段后,对此发出确认报文段(ACK = 1,seq = u + 1,ack = w + 1),Client 进入 TIME-WAIT(时间等待)状态。此时 TCP 未释放掉,需要经过时间等待计时器设置的时间 2MSL 后,Client 才进入 CLOSED 状态。 三次握手四次挥手详答