当前位置: 首页 > 后端技术 > Node.js

带你深入浅出地了解HTTP协议(一)

时间:2023-04-03 11:46:33 Node.js

写作背景最近在面试一些前端工程师的时候,总会问一个问题,‘你了解过HTTP协议吗?'有的,回答的还不错,有的,回答的不尽如人意,还有的,甚至直接跟我说,作为前端,我不需要懂这些,这些才是后端需要懂的.在我看来,无论是前端还是后端,了解HTTP协议都是很有必要的。毕竟,这就是我们吃的东西,不是吗?什么是协议?百度词条是这样解释的:协议,网络协议的缩写,网络协议是通信双方必须遵守的一套协议。比如如何建立连接,如何相互识别等等。只有遵循这个约定,计算机之间才能进行通信。它的三个要素是:句法、语义和时序。可能对于刚刚接触协议的同学来说,可能还看不懂上面这句话。那么协议具体是什么?我们都知道计算机传输的数据是以二进制形式传输的,即0,1。那么它是如何转化为我们看到的文字、图片、视频的呢?这里有一个很重要的环节--解码例如:字符'东'的UTF-8编码转换成二进制是111001001011100010011100,那我怎么把这个字发给你呢?你怎么知道我发送的是什么?于是,协议就这样应运而生了。设计一个协议来继续上面的问题。比如我把“东”字编码后发给你,你怎么知道我发的是文字呢?即使你知道我发送的文本,你用什么编码格式来解码我发送的数据?那么,让我们现在设计一个协议来解决上面提到的问题。首先,解决“你怎么知道我在发短信?”这个问题。’在计算机世界中,我们接触的不仅仅是文本,还有图像、视频等等。..因此,我们现在需要定义协议的第一个字段。我们使用消息中的第一位来标识我们的数据类型。0表示发送的数据是文本,1表示发送的数据是图片。所以,当我发送我的数据时,我会在'East'的UTF-8二进制编码前加一个0,最后的结果是0111001001011100010011100。接收数据时,我会判断报文的第一位,也就是text还是一张图片,但是现在又遇到了一个问题,应该用哪种编码格式来解析这串数据呢?解决第二个问题,你用什么编码格式解码我发送的数据?既然第一个问题解决了,我们的第二个问题就比较容易解决了。当数据的第一位为0时,也就是标记为文本时,我在数据的第二位添加另一个标识符,表示我的文本编码格式0表示UTF-81表示GBK所以,现在数据我发送变成这样00111001001011100010011100,当数据的第一位为1时,也就是识别为图片时,我数据的第二位为0为png,1为GIF。这样接收数据的一方只需要判断数据的前两位就可以解析出固定的格式。至此,我们的“协议”粗略版本就完成了。下一节将带你深入浅出地了解HTTP协议(二)进入HTTP的世界