HTTP请求过程概述

1 概述

前端工程师们经常会写 HTTP 请求的 code,但是却可能不太了解从请求一个 URL 到服务端响应最后显示到页面上是怎样的一个过程,所以我在这里进行一个知识普及,也是给自己做的一个笔记吧,话不多说,进入正题。

2 请求过程概览

1. 对请求进行预处理(如:判断什么协议的请求、安全检查等)plainplainplainplainplainplainplain
2. 根据请求URL进行域名解析(根据域名通过DNS查询IP地址)
3. 通过TCP协议发送HTTP请求
4. 服务端处理请求并响应
5. 客户端接收响应并处理响应(HTML渲染、数据渲染、静态资源渲染等)
6. 断开TCP连接 

3 请求过程概述

3.1 请求预处理

浏览器首先会判断是什么协议,如果是 HTTP 就按照 Web 来处理,同时会对 URL 进行安全检查,检查完成后再浏览器内核中会先查看缓存,然后拼接 HTTP 请求头等信息,如需了解 HTTP 协议,可以查看我的另一篇文章HTTP 概述

3.2 DNS 域名解析

应用层 DNS 域名解析为查找对应的 IP 地址,比如我们输入的 URL 是 www.baidu.com,首先由本机所设置的 DNS 服务器向 DNS 根节点查询负责 .com 区域的服务器,然后通过其中一个负责 .com 的服务器查询负责 baidu.com 的服务器。   有了 IP 后,可以通过 Socket API 发送数据了,可以通过传输层 TCP 或 UDP 协议。不过 HTTP 常用的是 TCP 协议。

3.2.1 查询递归(直到查询出来为止)

1. 搜索浏览器自身的DNS缓存(缓存时间约1分钟,且只能容纳1000条缓存)plainplain
2. 搜索系统自身的DNS缓存
3. 搜索 hosts文件
4. 搜索域名服务器 

3.3 通过 TCP 协议发送 HTTP 请求

可以通过传输层 TCP 或 UDP 协议建立连接,传输层的 TCP 协议为传输报文提供可靠的字节流服务。它的特性是将大块的数据分割成以报文段为单位的数据包进行逐条发送,并为它们编号,方便服务器接收时能准确地还原报文信息。TCP 协议通过“三次握手”等方法保证传输的安全可靠。  三次握手完成后,TCP 连接建立成功,然后通过网络层 IP 协议查询 MAC 地址,IP 协议主要是把 TCP 分割好的各段数据包发送给接收方。而要保证确实能发送接收方必须有接收方的 MAC 地址,也就是物理地址。IP 地址和 MAC 地址是一一对应的关系,每一个网络设备的 IP 地址可以根据网络不断变化,但是 MAC 地址一般是固定不变的。ARP 协议可以将 IP 地址解析成对应的 MAC 地址。当发送方和接收方双方不在同一个局域网时,需要多次中转才能到达最终的目标,在中转的过程中需要通过下一个中转站的 MAC 地址来搜索下一个中转目标。  到对方的 MAC 地址后,就将数据发送到数据链路层传输,这也就意味着客户端的请求已经完成,等待服务端响应。

3.3.1 三次握手的过程

1. 发送端先发送一个带有SYN(synchronize)标志的数据包给接收端,在一定的延迟时间内等待接收的回复plainplainplainplainplainplainplainplain
2. 接收端收到数据包后,传回一个带有SYN/ACK标志的数据包以示传达确认信息
3. 接收方收到后再发送一个带有ACK标志的数据包给接收端以示握手成功 

在这个过程中,如果发送端在规定延迟时间内没有收到回复则默认接收方没有收到请求,而再次发送,直到收到回复为止。

3.4 客户端接收响应并处理响应

服务端返回的数据是文本的形式返回的,所有浏览器需要解析数据。而浏览器是边解析边渲染的,现代浏览器的解析过程大致为:构建 DOM 树 –> 构建渲染树 –> 布局渲染树 –> 绘制渲染树。  通过解析文本构建 DOM 树,然后解析 css 构建渲染树,然后浏览器开始布局渲染树并将其绘制到屏幕上。  JS 的解析是由浏览器的 JS 解析引擎完成的。JS 有可能修改 DOM 结构,JS 又是单线程运行,所以这里面的解析是非常复杂的,具体就不多阐述了。

4 断开 TCP 连接

断开TCP连接需要进行四次挥手过程plainplainplain
1.客户端请求断开FIN,seq=u
2. 服务器确认客户端的断开请求ACK,ack=u+1,seq=v
3. 服务器请求断开FIN,seq=w,ACK,ack=u+1
4. 客户端确认服务器的断开ACK,ack=w+1,seq=u+1 

5 总结

这个过程根据计算机网络七层协议原理运行的,文章里面偶尔提到了一些,总之从应用层角度看大致就干了两件事,一个是过 DNS 查询 IP、通过 Socket 发送数据。在传输层建立 TCP 或 UDP 连接,网络层 IP 协议查询 MAC 地址,数据链路层传输数据,基本主要的步骤就是这些,如需具体了解,自行搜索。

最后

整理了75个JS高频面试题,并给出了答案和解析,基本上可以保证你能应付面试官关于JS的提问。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值