HTTP/1.0
HTTP/1.0
是
HTTTP
协议的第⼀个正式版本
,
主要具有以下特性:
引⼊了请求头和响应头,⽀持多种请求⽅法和状态码
不⽀持持久连接,每次请求都需要建⽴新的连接
HTTP/1.1
为了解决
HTTP/1.0
每次请求都需要建⽴新的连接的问题,
HTTP/1.1
提出了
⻓连接(持久连接)
,只要客户端和服务器任意⼀端没有明确提出断开连接,则保持TCP
连接状态。
HTTP/1.0的缺点:
在同⼀个
TCP
连接⾥⾯,客户端可以发起多个请求,只要第⼀个请求发出去了,不必等其回来,就可以发第⼆个请 求出去,可以减少整体的响应时间。
客户端需要请求两个资源。以前的做法是,在同⼀个
TCP
连接⾥⾯,先发送
A
请求,然后等待服务器做出回应, 收到后再发出 B
请求。那么,管道机制则是允许浏览器同时发出
A
请求和
B
请求。

但是
服务器必须按照接收请求的顺序发送对这些管道化请求的响应
。
如果服务端在处理
A
请求时耗时⽐较⻓,那么后续的请求的处理都会被阻塞住,这称为「队头堵塞」。 所以,HTTP/1.1
管道解决了请求的队头阻塞,但是没有解决响应的队头阻塞
。
当顺序发送的请求序列中的⼀个请求因为某种原因被阻塞时,在后⾯排队的所有请求也⼀同被阻塞了,会招致客户端⼀直请求不到数据,这也就是「队头阻塞
」

但是
HTTP1.1
仍然存在着不少问题:
- 头部冗余:每个请求和响应都需要带有⼀定的头部信息,每次互相发送相同的⾸部造成的浪费较多;
- 服务器是按请求的顺序响应的,如果服务器响应慢,会招致客户端⼀直请求不到数据,也就是队头阻塞;
- 没有请求优先级控制;
- 请求只能从客户端开始,服务器只能被动响应。
HTTP/2
HTTP/2
协议是基于
HTTPS
的
,
所以
HTTP/2
的安全性也是有保障的。

1.
头部压缩:
HTTP/2
使⽤
HPACK
压缩算法对请求和响应头部进⾏压缩,减少了传输的头部数据量,降低了延
迟。
2.
⼆进制帧:
HTTP/2
将数据分割成⼆进制帧进⾏传输,分为
头信息帧(
Headers Frame
)和数据帧(
Data
Frame
)
,增加了数据传输的效率。
3.
并发传输:引出了
Stream
概念,多个
Stream
复⽤在⼀条
TCP
连接,针对不同的
HTTP
请求⽤独⼀⽆⼆的
Stream ID
来区分,接收端可以通过
Stream ID
有序组装成
HTTP
消息,不同
Stream
的帧是可以乱序发送
的,因此可以并发不同的
Stream
,也就是
HTTP/2
可以并⾏交错地发送请求和响应。
4.
服务器推送:在
HTTP/2
中,服务器可以对客户端的⼀个请求发送多个响应,即服务器可以额外的向客户端 推送资源,⽽⽆需客户端明确的请求。
但是 HTTP/2 仍然存在着队头阻塞的问题,只不过问题是在传输层。
HTTP/2
是基于
TCP
协议来传输数据的,
TCP
是字节流协议,
TCP
层必须保证收到的字节数据是完整且连续的,这样内核才会将缓冲区⾥的数据返回给 HTTP
应⽤,那么当「前
1
个字节数据」没有到达时,后收到的字节数据只能存放在内核缓冲区⾥,只有等到这 1
个字节数据到达时,HTTP/2 应⽤层才能从内核中拿到数据,这就是
HTTP/2 队头阻塞问题。
HTTP1.1与HTTP2的⽐较
HTTP1.1
基于请求
-
响应模型。同⼀个连接中,
HTTP
完成⼀个事务(请求与响应),才能处理下⼀个事务。即:再 发出请求等待响应的过程种是没办法做其他事情的,会造成【队头阻塞】问题。
HTTP2
通过
Stream
这个设计(多个
Stream
复⽤⼀条
TCP
连接,达到并发的效果),解决了【队头阻塞】的问题, 提⾼了HTTP
传输的吞吐量。
HTTP/3
HTTP/2
队头阻塞的问题是因为
TCP
,所以
HTTP/3
把
HTTP
下层的
TCP
协议改成了
UDP
!
HTTP/3 基于 QUIC 协议,具有以下特点:
- 零 RTT 连接建⽴:QUIC 允许在⾸次连接时进⾏零往返时间(Zero Round Trip Time)连接建⽴,从⽽减少 了连接延迟,加快了⻚⾯加载速度。
- ⽆队头阻塞: QUIC 使⽤ UDP 协议来传输数据。⼀个连接上的多个stream之间没有依赖, 如果⼀个stream丢了 ⼀个UDP包,不会影响后⾯的stream,不存在 TCP 队头阻塞
- 连接迁移:QUIC 允许在⽹络切换(如从 Wi-Fi 到移动⽹络)时,将连接迁移到新的 IP 地址,从⽽减少连接的 中断时间。
- 向前纠错机制:每个数据包除了它本身的内容之外,还包括了部分其他数据包的数据,因此少量的丢包可以通 过其他包的冗余数据直接组装⽽⽆需重传。向前纠错牺牲了每个数据包可以发送数据的上限,但是减少了因为丢包导致的数据重传。
HTTP/3
协议与HTTP/2协议的区别
HTTP/3
同
HTTP/2
⼀样采⽤⼆进制帧的结构,不同的地⽅在于
HTTP/2
的⼆进制帧⾥需要定义
Stream
,⽽ HTTP/3 ⾃身不需要再定义
Stream
,直接使⽤
QUIC
⾥的
Stream
,于是
HTTP/3
的帧的结构也变简单了。

HTTPS
HTTPS
协议
协议(
protocol
):通信双⽅需要遵守的 统⼀规则。
HTTP
:
Hyper Text Transfer Protocol
:超⽂本传输协议
HTTPS
:
Hyper Text Transfer Protocol Secure
:超⽂本安全传输协议
SSL
:
Secure Socket Layer
安全套接字
TSL
:
Transport Layer Security
安全传输层协议
HTTPS = HTTP+SSL/TSL
HTTPS
的特点
1.
特点
信息加密:采⽤对称加密
+
⾮对称加密的混合加密的⽅式,对传输的数据加密,实现信息的机密性,解决了窃听的⻛险。
校验机制:⽤摘要算法为数据⽣成独⼀⽆⼆的「指纹」校验码,指纹⽤来校验数据的完整性,解决了被篡改的⻛险。
身份证书:将服务端的公钥放⼊到
CA
数字证书中,解决了服务端被冒充的⻛险。
2.
优点
在数据传输过程中,使⽤秘钥加密,安全性更⾼
可认证⽤户和服务器,确保数据发送到正确的⽤户和服务器
3.
缺点
握⼿阶段延时较⾼:在会话前还需进⾏
SSL
握⼿
部署成本⾼:需要购买CA
证书;需要加解密计算,占⽤
CPU
资源,需要服务器配置或数⽬⾼
HTTPS和HTTP的区别
HTTP
:
以
明⽂
的⽅式在⽹络中传输数据,
HTTPS
解决了
HTTP
不安全的缺陷,在
TCP
和
HTTP
⽹络层之间 加⼊了 SSL/TLS
安全协议,使得报⽂能够
加密传输
。
HTTPS
在
TCP
三次握⼿之后,还需进⾏
SSL/TLS
的握⼿过程,才可进⼊加密报⽂传输。
HTTP
的端⼝号是
80
,
HTTPS
的端⼝号是
443
。
HTTPS
协议需要向
CA
(证书权威机构)
申请数字证书,来保证服务器的身份是可信的。