FED

©FrontEndDev.org
2015 - 2024
web@2.22.0 api@2.20.0

Http 协议基础知识1:http 和 tcp

http协议是web前端开发的一块基石,对于大多数页面来说,它承载了全部的网络请求,其重要性不言而喻,但在平时的工作和面试中,发现很多从业者对其几乎不了解,在此为大家归纳总结出其中较为常见,与前端开发较为密切的http协议相关知识。一来免去大家翻看厚厚的协议书,二来也更有针对性。

首先,http是在 tcp/ip 之上的一层网络数据传输协议,包括请求头和请求体,都是纯文本不加密传输的。

http 请求的大体顺序如下。

  1. 用户发起 http 请求,client 首先要根据 url 确认 server 端的 ip 地址和端口。如果本机没有该 server 的 ip 地址缓存,就要通过 dns 解析得到 ip 地址,并缓存起来,这个 dns 解析的过程可能比较耗时,要花费一段时间。因此页面要合理规划域名个数,多域名对然能提高并发量,但在 dns 解析上也会消耗较多时间。
  2. 找到目标 server 的 ip 地址之后,就会建立 tcp 链接。由于 tcp 链接的可靠性,导致每次创建tcp链接都是一次额外的消耗(tcp在建立链接,发送数据前,会交换一系列的ip分组,也就是所谓的握手)。因此合理规划页面中请求的个数,尽量避免过多tcp请求的断开与重建,这里可以利用http协议的keep-alive特性。
  3. tcp链接建立成功后,开始http利用tcp开始发送数据。为了避免突然的过载和拥堵,tcp限制了每次可以发送的数据。每次数据确认后,才可以发送两倍的数据。也就是第一次发送一组数据,确认后,发送两组数据,再确认后,发送四组数据,一次类推。这个特性导致,一个新建的tcp连接,传输效率上要低于一个已经建立的tcp链接。

最终根据具体情况,client或server会关闭tcp链接,一个或一组http请求结束。

根据以上介绍,就要求前端工程师能够根据经验和实际情况判断,页面如何减少请求个数的同时利用并发。