2

写作背景

最近在面试一些前端工程师时,我总会问一个问题,'您有了解过HTTP协议吗?'有一些呢,答着还不错,有一些呢,回答有些差强人意,而有一些呢,竟然直接和我说身为前端不需要了解这些,这些是后端所需要了解的。在我看来,不管是前端与后端,了解HTTP协议是必要的,毕竟,我们吃的就是这一碗饭,不是吗?

何为协议?

百度词条中是这样解释的:

协议,网络协议的简称,网络协议是通信计算机双方必须共同遵从的一组约定。如怎么样建立连接、怎么样互相识别等。只有遵守这个约定,计算机之间才能相互通信交流。它的三要素是:语法、语义、时序。

或许对于刚接触协议的同学,或许有些理解不了上面的这句话。那么协议到底是什么呢?
我们都知道,计算机传输数据都是以二进制的形式来传输,也就是0,1 那么它是怎么转换为我们所看到的文字,图像,视频的呢? 这里有很重要一个环节就是编码---解码
例如:‘东’字的UTF-8编码转换为二进制便是 111001001011100010011100,那么我怎样把这个字发送给你呢?你又怎么知道我发送的是什么呢?所以,协议就是这样应运而生

设计一个协议

继续上面的问题,比如我现在把‘东’字编码之后的,发给你之后,你怎么知道我发送的是文字呢?就算是知道我发送的文字,你又以什么编码格式去解码我发送的数据呢?所以,我们现在来设计一个协议,解决上面所说的问题。
首先,解决这个问题 ‘你怎么知道我发送的是文字呢?’在计算机世界中,我们接触到的不仅仅是文本,还有图像,视频等等等等。。。所以,我们现在需要定义我们协议的第一个字段
我们把我们的数据类型用我们报文中的第一位标识 ,0表示发送的数据为文本,用1来表示数据为图片
所以,在我发送我的数据时,我会把‘东’的UTF-8二进制编码前加入一个0,最后结果为这样 0111001001011100010011100,在接受到数据的时候,我会把报文的第一位拿来判断,是文本还是图像,但是现在又遇到一个问题,我又该以哪种编码格式解析这一串数据呢?
解决第二个问题你又以什么编码格式去解码我发送的数据呢?
既然解决了第一个问题,那么我们的第二个问题就比较好解决了,当数据第一位为0的时候,也就是标识为文本的时候,我在数据第二位再添加一个标识符,来表示我的文本编码格式 0表示UTF-8
1则表示GBK 所以,现在我所发送的数据变成了这样 00111001001011100010011100,而当数据第一位为1的时候,也就是标识为图像的时候,我的数据第二位则用 0表示png
1表示GIF
这样,在接受数据方,只要判断数据的前俩位标识,来解析固定的格式便可,至此,我们的简陋版的‘协议’就完成了。
简陋版协议结构


下节内容 带你深入浅出HTTP协议(二)开始进入HTTP的世界


extendsObject
5 声望1 粉丝