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头部信息,但建立连接后,实际的消息传输较少头部信息,提高传输效率。
相关推荐
网络小白不怕黑7 分钟前
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
网络
加油搞钱加油搞钱26 分钟前
鹰盾加密器“一机一码”技术全维度剖析:从底层实现到生态防护体系
开发语言·网络·python
IP管家1 小时前
TikTok矩阵养号实战:住宅IP纯净度与设备指纹联动方案
大数据·网络·tcp/ip·ip
云盾安全防护1 小时前
金融机构的网络安全
网络·安全·web安全
qq_254674413 小时前
凤凰山社区 最低生活保障审核确认
网络·生活
循环渐进Forward3 小时前
【TinyWebServer】HTTP连接处理
linux·网络·c++·网络协议·算法·http
chian-ocean3 小时前
深入了解UDP套接字:构建高效网络通信
网络·网络协议·udp
论迹4 小时前
【JavaEE】-- HTTP
java·http·java-ee
想躺在地上晒成地瓜干4 小时前
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
linux·网络·音视频·树莓派·raspberrypi·树莓派教程
Cyrus_柯4 小时前
网络编程(Modbus进阶)
linux·c语言·网络·tcp/ip