网站首页 > 文章精选 正文
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协议上又增加了一层加密层,对数据进行加密,加密方法多种多样,客户端与服务器端双方根据加密所需的秘钥,对数据进行加密与解密,来得到正确的数据。
*部分图片来源于网络,侵删
猜你喜欢
- 2025-07-27 HTTP状态码滥用指南:全栈开发者的REST API最佳实践
- 2025-07-27 开发者必须了解的HTTP头部(http头部参数)
- 2025-07-27 轻松操控C#下载文件:WebClient与HttpClient实战详解
- 2025-07-27 http状态码完整版,再也不需要度娘了。
- 2025-07-27 探索Apache HttpClient超时时间如何设定?
- 2025-07-27 Java实现调用HTTP请求的几种常见方式
- 2025-07-27 HTTP与HTTPS的区别(http和https之间的区别)
- 2025-07-27 100个Java工具类之6:用4种方式发起HTTP请求
- 2025-07-27 HTTP和HTTPS(HTTP和HTTPS的主要区别是什么)
- 2025-07-27 http常见状态码(http常见状态码的含义)
- 最近发表
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)
- fmt.println (52)