Linux架构篇、第1章_01架构的介绍HTTP HTTPS 协议全面解析
题目:HTTP/HTTPS 协议全面解析:原理、区别与状态码详解
版本号: 1.0,0
作者: @老王要学习
日期: 2025.04.30
适用环境: 服务器
文档说明
本文围绕 HTTP/HTTPS 协议展开,详细介绍了协议的基本概念、工作原理、两者之间的区别以及常见的状态码。旨在帮助读者深入理解 HTTP/HTTPS 协议,为网络开发和应用提供理论支持
一、HTTP/HTTPS介绍
HTTP
超文本传输协议是( Hyper Text Transfer Protocol)的缩写,是互联网应用最广泛的一种网络协议,用于万维网服务器传输超文本到本地浏览器,基于TCP/IP通信协议来传递数据(HTML、图片、查询结果);默认使用端口80
TCP:(传输控制协议)
可靠性:TCP为HTTP提供了可靠的传输机制;通过序列号、确认应答、重传机制等确保数据准确无误的从客户端传送到服务器,或从服务器传回客户端
连接管理:HTTP通信开始前,TCP会在客户端和服务器之间连接“三次握手”;通信结束后,还会通过“四次挥手”关闭连接,保障通信的有序进行
三次握手(建立连接)
第一次握手:客户端向服务器发送一个带有SYN(同步序列号)标志的TCP报文段,此时客户端进入等待状态,表示连接请求已发送
第二次握手:服务器收到客户端的SYN报文,向客户端发送SYN+ACK报文段(SYN同步服务器序列号、ACK标志确认收到SYN)随后进入等待客户端查收状态
第三次握手:客户端收到服务器的SYN+ACK,向服务器发送一个ACK报文段;双方进入活动状态,标识连接成功,双方开始进行数据传输
举例:
三次握手(建立连接)
第一次握手:好比你要去朋友家借书,你先给朋友打电话说:“我想去你家借本书,你在家不?” 这就是客户端(你)向服务器(朋友)发送带有 SYN 标志的请求,里面带着你这边的一个随机编号(就像你打电话用的电话号码) 。这时你在等朋友回复,处于 “等待回复” 状态。
第二次握手:朋友接到电话后说:“我在家呢,你来吧,我也给你准备了一本我觉得不错的书推荐给你。” 这相当于服务器回复了一个带 SYN 和 ACK 标志的消息,朋友告诉了你他自己的 “编号”(他的电话号码 ),还确认收到了你的请求(表示知道你要来借书 )。朋友进入 “等你出发” 状态。
第三次握手:你听到朋友这么说,就回复:“好嘞,我这就出发!” 这就是客户端再发一个 ACK 消息确认收到朋友的回复,告诉朋友你收到他准备推荐书的消息了。这时你和朋友都准备好,可以进行借书这个 “数据传输” 活动了,连接就建立成功啦。
四次挥手:(关闭连接)
第一次挥手:客户端发送一个带有FIN(结束标志)的TCP报文段,表示自己不再发送数据了,但依可以接收数据,客户端进入’等待服务器回复’状态
第二次挥手:服务器收到FIN报文后,发送一个ACK报文段,确认客户端确定要断开连接,客户端不会再发送数据,但服务器仍然可以继续发送数据
第三次挥手:服务器也没有数据要发送时,向客户端发送一个FIN报文段,表示自己不再发送数据了;服务器进入“等待客户端断开”状态
第四次挥手:客户端收到服务器的FIN报文后,客户端再向服务器发送一个ACK报文段,客户端进入“确认离开等待”状态,等待2倍最大段生存期(MSL)时间后,彻底关闭连接;服务器收到这个ACK报文后,立即关闭连接
举例:
第一次挥手:你在朋友家借完书,准备走了,就跟朋友说:“我书借到啦,我准备回家啦!” 这就是客户端(你)向服务器(朋友)发送带 FIN 标志的消息,表示你不再借新的书(不再发送数据),但还能听朋友说话(接收数据),你进入 “等朋友回应” 状态
第二次挥手:朋友听到你说要走,就回复:“好的,我知道啦。” 这是服务器给你发一个 ACK 消息确认收到你要走的消息,朋友进入 “准备结束交流” 状态,你收到回复后进入 “等朋友也结束交流” 状态。这时朋友可能还有话跟你说,所以还能继续说话(发送数据)
第三次挥手:朋友说完想说的话,也跟你说:“我也没别的事儿啦,你路上注意安全!” 这是服务器给你发带 FIN 标志的消息,表示他也没什么要说的了(不再发送数据),朋友进入 “等你确认离开” 状态
第四次挥手:你听到朋友这么说,就回应:“行,我知道啦,拜拜!” 这是你给朋友发 ACK 消息确认收到他的告别,你进入 “确认离开等待” 状态,等一会儿确保没问题后就彻底离开朋友家(关闭连接)。朋友收到你的回复后,也关闭和你的交流(关闭连接)
IP:(网际协议)
IP负责在网络中寻址和路由数据包;它确定数据从源地址到目的地址的传输路径,为HTTP请求与响应找到正确的传输路径
HTTPS
安装超文本传输协议是(HyperText Transfer Protocol Secure)的缩写,在HTTP基础上加入SSL/TLS加密层,保障网络通信安全,防止数据在传输过程中被盗取、篡改,同时对服务器进行身份验证;默认使用端口443
SSL/TLS:
SSL及其继任者TLS是实现加密通信的关键;通信前客户端与服务器通过SSL/TLS握手协议加密算法、密钥等参数,之后的数据传输就会在这些规则下进行
二、HTTP/HTTPS原理
HTTP
建立连接:客户端向服务器发送一个TCP连接请求,服务器接受连接后。双发开始传输数据
发送请求:客户端按照 HTTP协议的格式,构造一个请求消息,包括请求方法(GET、POST)、请求路径、协议版本等可能的请求和请求体信息,将请求消息发送给服务器
处理请求:服务器收到请求后,根据请求的内容进行处理;解析客户端发来的信息,根据请求路径找到对应的资源与程序
发送响应:服务器处理结果按HTTP协议的格式封装成一个响应消息,包括响应状态码(200成功,404未找到)响应头与响应体等,将响应消息发送给客户端
关闭连接:客户端收到响应后,根据响应状态码与内容进行处理,当不需要继续和服务器通信,就会关闭TCP连接
HTTPS
SSL/TLS 握手:(四次握手)
第一次握手:客户端向服务器发送 “Client Hello”,告知自己支持的 SSL/TLS 版本、加密算法等信息,并给出一个随机数
第二次握手:服务器回复 “Server Hello”,确定使用的版本和算法,也给出一个随机数,同时发送自己的数字证书,可能还会请求客户端的证书
第三次握手:客户端验证服务器证书,生成一个特殊随机数并用服务器公钥加密发送,然后计算出会话密钥,通知服务器使用新密钥加密,并发送一个加密的 “Finished” 消息
第四次握手:服务器解密得到随机数并算出会话密钥,通知客户端使用新密钥,也发送一个加密的 “Finished” 消息,让客户端验证密钥是否正确
数据传输:握手完成后,客户端和服务器就可以使用会话密钥对数据进行加密传输。客户端将请求数据加密后发送给服务器,服务器收到后解密并处理请求,然后将响应数据加密发送给客户端,客户端再解密得到响应内容
连接关闭:当数据传输完成后,客户端或服务器可以发起关闭连接的请求,双方按照一定的步骤关闭 SSL/TLS 连接和底层的 TCP 连接
三、HTTP/HTTPS区别
3.1安全性
HTTP
HTTP以明文传输数据,传输中易被黑客窃取、篡改和监听,用户登录时用户名和密码有被盗取风险
HTTPS
对数据加密,传输时为密文,仅合法接收能够解密的数据,借助数字认证书验证服务器身份,可有效防止数据被窃改,避免中间人攻击,大幅提升了数据安全性
3.2连接方式
HTTP
连接简单,客户端向服务器发送请求,服务器响应请求后连接即结束
HTTPS
连接时需要先进行SSL/TLS握手,以验证服务器身份、协商加密算法和生成加密密钥等,握手成功后才会进行数据传输
3.3端口
HTTP
默认使用80端口进行数据传输
HTTPS
默认使用443端口进行数据传输
3.4证书
HTTP
不需要数字证书来验证身份
HTTPS
要求服务器拥有由权威机构颁发的数字证书,客户端可以通过验证证书来确定服务器的身份是否可信
3.5性能
HTTP
因为没有加密和解密的过程,所以性能相对较高,响应速度较快
HTTPS
因为需要进行加密和解密操作,以及SSL/TLS握手,所以消耗一定性能和时间,导致访问速度相对较慢;不过,随着现代科技的飞速发展,性能差异在大多情况下并不明显
3.6兼容性
HTTP
兼容性较好,几乎所以的浏览器和设备都支持HTTP协议
HTTPS
虽然现在大多数浏览器和设备都支持HTTPS,但是一些旧设备和特殊环境,可能会存在兼容性的问题
3.7成本
HTTP
运行成本较低,不需要购买和维护数字证书
HTTPS
需要购买数字证书,证书的价格因证书类型和颁发机构而异
四、HTTP/HTTPS状态码
4.1信息性状态码
状态码 | 功能 |
---|---|
100 | 客户端继续提交剩余请求 |
101 | 协议切换请求已受理 |
4.2成功状态码
状态码 | 功能 |
---|---|
200 | 请求成功 |
201 | 上传文件成功 |
202 | 接受请求但未处理完毕 |
203 | 请求成功,但信息不一定准确 |
204 | 请求成功,但无返回内容 |
205 | 请求成功,但要求重置请求内容 |
206 | 范围请求成功 |
4.3重定向状态码
状态码 | 功能 |
---|---|
301 | 资源永久迁移,需更新访问地址 |
302 | 资源临时转移,后续仍可用原地址 |
304 | 资源未变更,可直接使用缓存 |
4.4客户端错误状态码
状态码 | 功能 |
---|---|
400 | 请求格式错误 |
401 | 身份认证失败 |
403 | 权限不足禁止访问 |
404 | 资源不存在 |
4.5服务器错误状态码
状态码 | 功能 |
---|---|
500 | 服务器内部错误 |
502 | 上游服务器响应异常 |
503 | 服务器临时不可用 |