HTTP协议(Hyper Test Transfer Protocol),全称为超文本传输协议,本质上是一种用于分布式、协助式的信息系统应用层协议,也是我们所熟悉的万维网的通讯基础。
HTTP的诞生年代并不久远,在1989年由欧洲的核子研究组织(CERN)发起,由万维网协会(W3C)与互联网工程组(IETF)讨论协调,多方共同制定下才有了HTTP1.1作为第一个正式发表的标准。

HTTP本质上是一种客户端(用户端)与服务器端(网站)进行数据的请求和应答的标准,相当于标准的数据交互必须满足这一统一标准,来方便各方对数据的解析与使用,而HTTP作为一种架设在TCP通信层之上的应用层协议,相当于对TCP传输的这类数据做了相关的规范,实现一统。比如我们访问某一个网站,那么客户端会向服务器发起一个HTTP的请求到指定的端口(通常为80端口),那么服务器在收到这个标注的HTTP请求后,需要对这个请求产生应答,而应答的内容则是服务器上存储的HTML文件(也就是网页上看到的内容)和图像数据,这些回复同样必须满足HTTP标准,否则回复给客户端的数据是无法正常解析的。

前面已经概括性地说明了HTTP的工作流程,核心就是请求与回复的标准,也提到了其是建立在TCP层上的一个应用层协议,那么他们详细的交互过程是怎么样的呢?
首先第一步,客户端需要先连接到指定的web服务器,当你打开浏览器输入网址访问时,浏览器会在后台创建一个TCP客户端,向服务器端请求连接,端口就是前面讲到的,一般为80端口。


第二步,后台需要进行HTTP组包,也就是HTTP协议的核心,一则数据,到底长什么样?需要有什么标准?才是协议的本质,比如如下一则请求信息,他应当包含有这些部分

这样一则数据将会被发送至服务器,服务器需要在解析前面部分后对数据部分进行回复,需要注意的是,服务器是不对来访数据进行保存的,也没有重发机制,所以请求失败是不可逆的,如果失败需要重新发起请求。

第三步,服务器需要对数据进行返回,返回数据同样需要满足HTTP的协议标准,如下一则回复数据:


当客户端收到了来自于服务器的返回后,需要根据HTTP头部对整个协议包进行解析,如果解析正确,就可以取出数据部分进行使用了,这个数据部分可以是多种类型,比如像是上图的请求类型,是设备向服务器发起请求,想要获取到此时设备需要连接的MQTT服务器的信息以及设备本身需要接入MQTT服务器所需的三要素,这种请求也可以返回HTML格式的文档,也就是我们熟悉的网页文件,浏览器收到这个文件解析出来,就可以显示到屏幕上,成为了我们所见到的网页,这种数据也可以是文件或图像等,相当于协议只是载体,一个拥有标准的载体,其承载的数据类型是可以不同的。
最后一步,HTTP是一种默认的短链接协议,众所周知TCP层是面向连接的,但是封装成HTTP用户层协议后,再发起数据请求,服务器返回数据,客户端解析出正常数据后,是需要断开连接的,这样也是为了减少服务器的压力。
最后是需要说明一下HTTPS,HTTP虽然应用广泛,但是其本质是一种明文协议,也就是协议本身有着不小的安全隐患,其数据容易被截取并解析,于是HTTPS应运而生。HTTPS其本质就是在HTTP协议上又增加了一层加密层,对数据进行加密,加密方法多种多样,客户端与服务器端双方根据加密所需的秘钥,对数据进行加密与解密,来得到正确的数据。
