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头部信息,但建立连接后,实际的消息传输较少头部信息,提高传输效率。
相关推荐
汤愈韬4 分钟前
三种常用 NAT 的经典案例
网络协议·网络安全·security
等风来不如迎风去11 分钟前
【win11】最佳性能:fix 没有壁纸,一直黑屏
网络·人工智能
Harvy_没救了29 分钟前
【网络部署】 Win11 + VMware CentOS8 + Nginx 文件共享服务 Wiki
运维·网络·nginx
汤愈韬1 小时前
NAT Server 与目的Nat
网络·网络协议·网络安全·security
2401_873479402 小时前
断网时如何实时判断IP归属?嵌入本地离线库,保障风控不中断
运维·服务器·网络
7ACE2 小时前
Wireshark TS | TLP 超时时间
网络·网络协议·tcp/ip·wireshark·tcpdump
其实防守也摸鱼3 小时前
CTF密码学综合教学指南--第三章
开发语言·网络·python·安全·网络安全·密码学
其实防守也摸鱼3 小时前
CTF密码学综合教学指南--第四章
网络·笔记·安全·网络安全·密码学·ctf
草履虫君4 小时前
VMware 虚拟机网络性能优化指南:从 11 秒到 4 秒的完整调优实践
服务器·网络·经验分享·性能优化
@insist1234 小时前
信息安全-防火墙技术演进全景:从代理NAT 到下一代及专项防火墙
网络·安全·web安全·软考·信息安全工程师·软件水平考试