首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >http、WebSocket 协议的理解

http、WebSocket 协议的理解

原创
作者头像
王宝
修改2024-11-23 10:07:17
修改2024-11-23 10:07:17
4280
举报

http协议说明:

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

WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议。它提供了一种在客户端(通常是浏览器)和服务器之间进行双向数据交换的标准方法,从而实现了实时通信。

a、 全双工通信:WebSocket 允许客户端和服务器之间的数据流同时保持打开状态,这意味着双方可以随时发送消息,而不需要等待对方的响应。

b、 长期连接:一旦建立连接,WebSocket 连接会一直保持打开状态,直到被显式关闭或因网络错误中断。这避免了频繁重新建立连接带来的开销。

c、 低延迟:由于 WebSocket 使用单一的长连接,减少了握手次数和头部开销,因此能够实现更低的延迟。

d、 二进制和文本数据支持:WebSocket 支持传输二进制数据和文本数据,这使得它适用于多种类型的应用场景,如实时游戏、聊天应用、文件传输等。

握手过程

1. 客户端请求:客户端发送一个 HTTP 请求,请求头中包含上述提到的关键字段。

代码语言:txt
复制
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13

2. 服务器响应:

如果服务器支持 WebSocket 并且验证通过,它会返回一个 HTTP 101 状态码,表示协议切换成功。

代码语言:txt
复制
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 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • http协议说明:
  • WebSocket
    • 握手过程
    • 安全性
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档