http和ws的区别

news/2025/1/31 2:09:05/

一. 连接建立

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

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:

// 握手请求
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头部信息,但建立连接后,实际的消息传输较少头部信息,提高传输效率。


http://www.ppmy.cn/news/1568033.html

相关文章

【后端开发】字节跳动青训营Cloudwego脚手架

Cloudwego脚手架使用 cwgo脚手架 cwgo脚手架 安装的命令&#xff1a; GOPROXYhttps://goproxy.cn/,direct go install github.com/cloudwego/cwgolatest依赖thriftgo的安装&#xff1a; go install github.com/cloudwego/thriftgolatest编辑echo.thrift文件用于生成项目&…

蓝桥杯python语言基础(1)——编程基础

目录 一、python开发环境 二、python输入输出 &#xff08;1&#xff09;print输出函数 print(*object&#xff0c;sep,end\n,......) &#xff08;2&#xff09;input输入函数 input([prompt]), 输入的变量均为str字符串类型&#xff01; input()会读入一整行的信息 ​编…

selenium定位网页元素

1、概述 在使用 Selenium 进行自动化测试时&#xff0c;定位网页元素是核心功能之一。Selenium 提供了多种定位方法&#xff0c;每种方法都有其适用场景和特点。以下是通过 id、linkText、partialLinkText、name、tagName、xpath、className 和 cssSelector 定位元素的…

MySQL 9.2.0 的功能

MySQL 9.2.0 的功能 MySQL 9.2.0 的功能新增、弃用和删除内容如下&#xff1a; 新增功能 权限新增12&#xff1a;引入了CREATE_SPATIAL_REFERENCE_SYSTEM权限&#xff0c;拥有该权限的用户可执行CREATE SPATIAL REFERENCE SYSTEM、CREATE OR REPLACE SPATIAL REFERENCE SYSTEM…

Kotlin泛型学习篇

泛型: in、out、where Kotlin 中的类可以有类型参数&#xff0c;与 Java 类似&#xff1a; class Box<T>(t: T) {var value t }创建这样类的实例只需提供类型参数即可&#xff1a; val box: Box<Int> Box<Int>(1)但是如果类型参数可以推断出来&#xff…

2.3.1 基本数据类型

ST&#xff08;Structured Text&#xff09;语言支持多种基本数据类型&#xff0c;用于定义变量、常量以及函数参数等。这些数据类型涵盖了布尔值、整数、浮点数、字符和字符串等常见类型。以下是ST语言中基本数据类型的详细说明&#xff1a; 布尔类型&#xff08;BOOL&#xf…

2024年除夕

多少年前的除夕&#xff0c;一如今天这样的除夕&#xff1b;多少年后的除夕&#xff0c;也一如多少年前的除夕。 无数个这样的除夕下午&#xff0c;我打开电脑&#xff0c;望着窗外安静的小区&#xff0c;车声渐渐稀疏的马路&#xff0c;想写下一些新的感受时&#xff0c;多少…

当AI风暴来袭:中美科技商业版图的迥异走向

当AI风暴来袭:中美科技商业版图的迥异走向 美国科技巨头的 AI 豪赌:Stargate 公司的诞生 2025 年,科技界被一则重磅消息所震动:软银、NVIDIA、Oracle 与 OpenAI 共同组建了 Stargate 公司。这一合作堪称豪华阵容,软银作为全球知名的投资巨头,拥有雄厚的资金实力和广泛的…