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头部信息,但建立连接后,实际的消息传输较少头部信息,提高传输效率。
相关推荐
23zhgjx-zgx1 分钟前
OSPF:虚链路
网络·tcp/ip·华为·智能路由器·ensp
咩咩觉主35 分钟前
Unity网络开发基础 (2) 网络协议基础
网络·unity·c#
C182981825752 小时前
tcp udp区别
网络协议·tcp/ip·udp
嵌入式悦翔园2 小时前
嵌入式设备的功能安全和信息安全?
网络·安全·php
喝养乐多长不高4 小时前
HTTPS加密原理详解
网络·网络协议·http·https·证书·非对称加密·对称加密
D-river4 小时前
【Academy】HTTP 请求走私 ------ HTTP request smuggling
网络·网络协议·安全·web安全·http·网络安全
只做开心事6 小时前
Linux网络之数据链路层协议
linux·服务器·网络
AI学IT6 小时前
(安全防御)旁挂组网双机热备负载分担实验
运维·服务器·网络
挣扎与觉醒中的技术人6 小时前
【技术干货】三大常见网络攻击类型详解:DDoS/XSS/中间人攻击,原理、危害及防御方案
前端·网络·ddos·xss
Lin桐7 小时前
②Modbus TCP转Modbus RTU/ASCII网关同步采集无需编程高速轻松组网
linux·网络协议·tcp/ip·网络安全·缓存·信息与通信·信号处理