29 | HTTP/1:HTTP性能优化
超文本传输协议 HTTP/0.9
特点:
- 没有请求头和请求体,只需要一个请求行
- 没有响应头,只有返回数据,不需要告诉浏览器过多信息
-
被浏览器推动的 HTTP/1.0
特点: 增加了请求头和响应头:用以表示文件类型、文件压缩类型、文件编码类型、语言版本
- 增加了状态码:表示实际请求处理的结果
- 增加了Cache机制:用以减轻服务器的压力
-
缝缝补补的 HTTP/1.1
特点:
持久连接:HTTP/1.1 中增加了持久连接的方法,它的特点是在一个 TCP 连接上可以传输多个 HTTP 请求,只要浏览器或者服务器没有明确断开连接,那么该 TCP 连接会一直保持。(目前浏览器中对于同一个域名,默认允许同时建立 6 个 TCP 持久连接。)
- HTTP 管线化:将多个 HTTP 请求整批提交给服务器的技术,虽然可以整批发送请求,不过服务器依然需要根据请求顺序来回复浏览器的请求
- 提供虚拟主机的支持: 将一个物理主机划分为多个虚拟主机,通过浏览器端的请求头Host 字段,浏览器根据不同的Host 字段值做不同的处理
- 对动态生成的内容提供了完美支持:引入Chunk transfer 机制
-
30|HTTP/2:如何提升网络速度?
HTTP 1.1的问题
TCP 的慢启动
- 同时开启了多条 TCP 连接,那么这些连接会竞争固定的带宽
-
HTTP/2的特点
HTTP/2 的多路复用
- 可以设置请求的优先级
- 服务器推送
- 头部压缩
HTTP/2 的多路复用
一个域名只使用一个 TCP 长连接和消除队头阻塞问题
HTTP2的多路复用机制:为每一个请求生成一个ID,服务器端接收到请求以后,可以根据请求的优先级(或其他喜好)决定优先返回哪些内容给浏览器,可以先返回响应头,后面在合适的时机再返回响应体,之所以可以这样乱序发送,是因为每一个响应数据都有对应的ID,浏览器接受到数据以后,再根据对应的ID将其拼接成一个完成的HTTP响应数据。
多路复用的实现
通过引入二进制分帧层,为请求和响应增加了ID,就实现了 HTTP 的多路复用技术,可以乱序发送数据
- 首先,浏览器准备好请求数据,包括了请求行、请求头等信息,如果是 POST 方法,那么还要有请求体。
- 这些数据经过二进制分帧层处理之后,会被转换为一个个带有请求 ID 编号的帧,通过协议栈将这些帧发送给服务器。
- 服务器接收到所有帧之后,会将所有相同 ID 的帧合并为一条完整的请求信息。然后服务器处理该条请求,并将处理的响应行、响应头和响应体分别发送至二进制分帧层。
- 同样,二进制分帧层会将这些响应数据转换为一个个带有请求 ID 编号的帧,经过协议栈发送给浏览器。
- 浏览器接收到响应帧之后,会根据 ID 编号将帧的数据提交给对应的请求。
31|HTTP/3:甩掉TCP、TLS 的包袱,构建高效网络
HTTP2的问题
- TCP 的队头阻塞:在 TCP 传输过程中,由于单个数据包的丢失而造成的阻塞称为 TCP 上的队头阻塞
- TCP 建立连接的延时:TCP(1.5RTT) + TLS(1-2RTT) = 3~4 个 RTT(Round Trip Time 网络延迟)
-
QUIC 协议(Quick UDP Internet Connections)
QUIC 协议特点: 实现了类似 TCP 的流量控制、传输可靠性的功能(虽然UDP不支持可靠传输,增加了一层实现数据包重传、拥塞控制以及其他一些 TCP 中存在的特性)
- 集成了 TLS 加密功能
- 实现了 HTTP/2 中的多路复用功能(QUIC 实现了在同一物理连接上可以有多个独立的逻辑数据流)
- 实现了快速握手功能
**
HTTP1 VS HTTP1.1 VS HTTP2 的对比
HTTP1
- 无状态:服务器不记录不存储请求过的状态
- 无连接:每一次发送请求,都需要重新建立TCP连接
HTTP1.1**
- cookie:增加了cookie记录客户端身份
- 缓存机制
- 断点续传
- 持久连接 connection: keep-alive:对于同一个域名下的请求,可以复用TCP连接
- 管道化:在同一个TCP连接下,允许发送多个HTTP请求,但是响应的顺序依然是按照请求的顺序返回(没有解决对头阻塞的问题) ``` // 无管道化 请求1 > 响应1 —> 请求2 > 响应2 —> 请求3 > 响应3
// 管道化 请求1 —> 请求2 —> 请求3 > 响应1 —> 响应2 —> 响应3 ```
HTTP2
- 多路复用:一个TCP连接可以发送多个HTTP请求
- 二进制分帧层
- 将一个TCP划分为多个流(stream)
- 将http消息分解为独立的帧(frame)【帧代表着最小的数据单位,每个帧会标识出该帧属于哪个流,流也就是多个帧组成的数据流】
- 帧通过自己所属的流乱序发送
- 服务端根据标识符和首部将消息重新组装起来
- 请求优先级
- 可以设置请求的优先级,对优先级高的请求优先响应
- 服务端推送:服务器端可以向客户端推送消息
- 请求头压缩
HTTP VS HTTPS 的对比
1、https协议需要到ca申请证书,一般免费证书较少,因而需要一定费用。
2、http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
3、http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
4、http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
TCP VS UDP
UDP(User Datagram Protocol 用户数据包协议)
- UDP不能保证数据的可靠性,但是传输速度非常快
- 主要应用在一些关注速度、但是不那么严格要求数据完整性的领域,如在线视频、互动游戏等
TCP(Transmission Control Protocoa, 传输控制协议): 面向连接的、可靠的、基于字节流的传输层通信协议
- 对于数据包丢失的情况,TCP 提供重传机制;
- TCP 引入了数据包排序机制,用来保证把乱序的数据包组合成一个完整的文件。
- 主要应用在一些关注数据传输可靠性的应用,如邮箱