http和ws的区别

一. 连接建立

1.HTTP:

(1)使用TCP协议建立连接

(2)每次请求都是独立的,即使是同一用户的连续请求,也会重复建立和断开连接(除非使用了HTTP/2或持久连接)

(3)无状态协议。不保存状态信息,每次请求都需要全部信息(包括cookie等)来确定用户状态

2.WebSocket:

(1)初次连接时通过HTTP进行握手(HTTP 101状态码),之后升级为WebSocket协议

(2)一旦建立连接,除非主动关闭,否则将保持连接状态

(3)有状态连接,保持持久连接,支持状态信息的持久化传输,不需每次都传递全部信息

二.数据传输

1.HTTP

(1)请求-响应模型。客户端发起请求,服务器响应请求

(2)信息传输包含较多的头部数据(HTTP headers),每次请求都可能包含重复的头信息

(3)适用于短连接,传输完毕即断开

2.WebSocket

**(1)**双向通信。一旦连接建立,客户端和服务器可以相互发送消息,不需要等待对方发起请求

(2)由于连接的长期保持,数据传输只需少量的头部信息(WebSocket帧头部),传输更加高效

(3)适用于长连接,特别是需要频繁交互的应用,如实时聊天、游戏等

三.性能和效率

1.HTTP

(1)由于每次请求都需要建立和关闭连接,性能开销较大

(2)适合低频率、一次性的数据请求,不适合频繁交互

2.WebSocket:

**(1)**保持连接状态,可以高效地进行频繁的数据传输

(2)性能高,延迟小,非常适用于实时性要求高的应用

四.示例

1.http:

html 复制代码
GET /api/v1/resource HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/58.0.3029.110 Safari/537.3
Accept: application/json
Cookie: sessionId=abc123

<服务器响应>

HTTP/1.1 200 OK
Content-Type: application/json
Set-Cookie: sessionId=abc123; Path=/

{
  "data": "example"
}

2.WebSocket:

html 复制代码
// 握手请求
GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Version: 13

<服务器响应>

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk=

<数据传输>

客户端发送帧:
0x81 0x05 0x48 0x65 0x6C 0x6C 0x6F  (代表 "Hello")

服务器回应帧:
0x81 0x06 0x57 0x6F 0x72 0x6C 0x64 0x21  (代表 "World!")

五.长连接与短连接

1.http:

(1)通常使用短连接,每次请求都会建立一次连接,处理完后立即关闭

(2)可以通过HTTP/1.1的持久连接(Keep-Alive)机制实现长连接,但仍不适合频繁通信

2.WebSocket:

**(1)**本质上是长连接,一旦连接建立,将持续到一方关闭连接

(2)非常适合需要持续通信的应用场景,如实时消息推送、在线协作等

六.应用场景

1.http:

(1)静态资源加载,如HTML、CSS、JavaScript文件

(2)API请求和响应,如RESTful API调用

(3)适用于对实时性要求不高,且频次不高的通信

2.WebSocket:

**(1)**实时通讯,如在线聊天、在线游戏

(2)实时数据推送,如股票行情、体育比赛直播

(3)在线协作工具,如Google Docs实时编辑、多人白板等

七.补充

1.HTTP:

  • 用途:主要用于请求-响应模式的通信,如浏览网页、API调用等。
  • 连接方式:基于请求-响应模式。客户端(如浏览器)向服务器发起请求,服务器处理请求并返回响应。
  • 状态:无状态。每次请求都是独立的,不依赖其他请求。
  • 端口:通常使用端口80(HTTP)和443(HTTPS)。
  • 数据方向:单向。客户端发起请求,服务器返回响应。
  • 头部信息:每次请求和响应都包含大量头部信息,可以携带元数据。

2.WebSocket:

  • 用途:用于建立持久的、双向通信通道,适用于实时应用,如聊天应用、在线游戏等。
  • 连接方式:在初始的HTTP握手之后,连接升级为WebSocket协议。握手成功后,建立一个持久的、全双工连接。
  • 状态:有状态。连接一旦建立,通信双方保持连接直到一方关闭。
  • 端口:通常使用端口80和443,但在握手之后连接会升级为WebSocket。
  • 数据方向:双向。客户端和服务器可以相互发送消息,而不需要新建连接。
  • 头部信息:初始握手时包含HTTP头部信息,但建立连接后,实际的消息传输较少头部信息,提高传输效率。
相关推荐
IPdodo跨境网络12 分钟前
HTTP 与 SOCKS5 代理到底差在哪?用 Node.js 跑一次连接链路对比
http
Delite80238 分钟前
磷酸酯抗燃油矿物油检测技术及多行业应用场景解析
网络·安全
聚美智数40 分钟前
SSL证书信息查询-SSL域名解析-SSL证书查询服务-SSL证书解析服务API接口介绍
网络·网络协议·ssl
瓦学妹41 分钟前
美国住宅IP如何选?不同平台配置选择标准与教程指南
网络·网络协议·tcp/ip
小小龙学IT1 小时前
gRPC 开源高性能 RPC 框架深度解析:从 HTTP/2 到跨语言微服务实战
http·rpc·开源
SLD_Allen1 小时前
基于 eBPF + Cilium 的 Kubernetes 网络可观测与安全治理实践
网络·安全·kubernetes
Jlzn88882 小时前
轻量化与高可靠性的平衡之道:CCS集成母排产线关键工艺解析
大数据·网络·物联网
小绫网络安全2 小时前
2026 年网络安全新手入门实战路线
网络·安全·web安全
草莓熊Lotso3 小时前
【LangChain】核心技术:嵌入模型与向量存储完全指南
服务器·网络·python·langchain