
HTTP/2相比HTTP/1.1在性能和效率上有显著提升,主要通过多路复用、二进制分帧、请求优先级、服务器推送、头部压缩和流量控制等机制实现。
a、多路复用(Multiplexing)、连接复用(Connection Reuse)
HTTP/1.0:(1996年,作为RFC 1945发布。)
每次请求都需要建立一个新的 TCP 连接,这会导致大量的连接建立和关闭开销,增加了延迟。
HTTP/1.1:(1999年,作为RFC 2068首次提出,后来在RFC 7230至RFC 7237中进行了更新。)
默认使用持久连接(Persistent Connections),即一个 TCP 连接可以用于多个请求和响应,减少了连接建立的开销。
虽然支持持久连接(keep-alive),但每个请求仍然需要等待前一个请求完成。
支持管道化,允许客户端在不等待前一个请求响应的情况下发送后续请求。
支持分块传输编码(chunked transfer encoding),允许服务器实时地发送数据给客户端。
HTTP/2:(2015年,作为RFC 7540发布。)
支持多路复用,可以在同一个连接上并发传输多个请求和响应,从而减少了延迟和提高了性能。
b、二进制分帧(Binary Framing)
HTTP/1.1:基于文本的协议,请求和响应都是以文本形式发送的。
HTTP/2:使用二进制分帧,将消息分成多个帧,这些帧可以交错发送,从而提高了传输效率和可靠性。
c、请求优先级(Request Prioritization)
HTTP/1.1:没有内置的请求优先级机制,所有请求按顺序处理。
HTTP/2:支持请求优先级,客户端可以为不同的请求分配优先级,服务器可以优先处理高优先级的请求
d、服务器推送(Server Push)
HTTP/1.1:服务器只能在客户端发起请求后才能发送响应。
HTTP/2:支持服务器推送,服务器可以在客户端请求之前主动推送资源,减少加载时间。
e、 头部压缩(Header Compression)
HTTP/1.1:每次请求都会发送完整的头部信息,增加了传输的数据量。
HTTP/2:使用HPACK算法对头部进行压缩,减少了头部信息的传输量,提高了传输效率。
f、流量控制(Flow Control)
HTTP/1.1:没有流量控制机制。
HTTP/2:支持流量控制,可以动态调整数据流的速度,防止接收方过载。
WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它提供了一种在客户端(通常是浏览器)和服务器之间进行双向数据交换的标准方法,从而实现了实时通信。
a、 全双工通信:WebSocket 允许客户端和服务器之间的数据流同时保持打开状态,这意味着双方可以随时发送消息,而不需要等待对方的响应。
b、 长期连接:一旦建立连接,WebSocket 连接会一直保持打开状态,直到被显式关闭或因网络错误中断。这避免了频繁重新建立连接带来的开销。
c、 低延迟:由于 WebSocket 使用单一的长连接,减少了握手次数和头部开销,因此能够实现更低的延迟。
d、 二进制和文本数据支持:WebSocket 支持传输二进制数据和文本数据,这使得它适用于多种类型的应用场景,如实时游戏、聊天应用、文件传输等。
1. 客户端请求:客户端发送一个 HTTP 请求,请求头中包含上述提到的关键字段。
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 132. 服务器响应:
如果服务器支持 WebSocket 并且验证通过,它会返回一个 HTTP 101 状态码,表示协议切换成功。
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=3. 连接建立:一旦握手成功,客户端和服务器之间的 WebSocket 连接就建立了,可以开始双向通信。
加密:WebSocket 支持使用 TLS(Transport Layer Security)进行加密,通常通过 wss:// 前缀来标识安全的 WebSocket 连接。
子协议:WebSocket 协议还支持协商使用特定的子协议,这些子协议可以定义特定的应用层语义,例如 JSON-RPC 或 MQTT
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。