首先我们要了解http协议与https协议。协议其实就是数据块(存储特定格式的数据库)
其中https协议就是在http协议的基础上进行加密(SSL/TLS).http是应用层协议
http请求:由客户端发起的
- get 静态资源
- post 动态资源
http响应
1、websocket协议详解
属于全双工通信协议,允许客户端和服务器之间建立持久化的双向通讯连接。WebSocket协议设计的初衷就是解决HTTP协议在实时交互的局限性,例如长轮询、Ajax方法的高延迟问题,WebSocket可以在单个TCP连接上实现客户端与服务器之间的实时低延迟数据传输。
其中http1.1建立的就是短连接
1.1单工、半双公和双工
这三个术语描通讯方向性,主要适应数据传输和网络通讯。
- 单工:单工通讯是单向的,数据只能从发送方传送到接受发,而无法反向传输,通讯过程不支持反馈。例如电视广播、传统广播电台
- 半双工:半双工通信是双向的,但是任何时刻只能有一个方向的数据传输。发送方和接收方可以交替发送和接收数据,但不能同时进行。例:对讲机
- 双工:双工通讯是完全双向的,数据可以同时在两个方向传输。发送方和接收方可以同时发送和接收数据。例如,电话通讯;网络通信。
1.2Http的局限性
HTTP(超文本传输协议)是一种用于传输数据的协议,具有局限性。
- 无状态性:HTTP是一种无状态协议,每次请求都是独立的,不会保留客户端的上下文信息。这使得用户会话和状态管理变得复杂,需要额外的机制(cookies或sessions)
- 性能问题:延迟,每次请求都需要重新建立连接,尤其是HTTP1.1,存在多个请求会造成额外延迟;宽带浪费:每次请求都需要发送请求头,增加网络宽带消耗。
- 安全性:HTTP是明文,容易被窃听篡改。HTTP本身不提供加密,HTTPS使用SSL/TLS进行加密。
- 不支持双向通信:是请求-响应模型。
- 请求重定向和缓存管理复杂性:HTTP请求重定向和缓存管理可能导致性能下降。
- 适应性差:HTTP初衷是静态页面传输,现代动态内容支持不够灵活。
虽然HTTP是互联网通讯的基础,其局限性便于开发者。代替方案:websocket、HTTP2.0 和HTTP3.0。
2、WebSocket
2.1标准协议
websocket是基于TCP的协议,连接从一个标准的HTTP请求开始,经过一次协议升级后,建立一个全双工的websocket连接
webSokcet默认端口
- 80端口 : 非加密的WebSocket,使用wsl开头
- 443端口:加密的WebSocket协议(SSL/TSL加密),wss开头
WebSocket与URL类似,但是有一些特定的细节。
ws://[host]:[port]/[path]
- 协议
- ws:// :表示WebSocket协议
- wss:// :表示WebSocket Secure(加密的WebSocket),类似于HTTPS
- 主机(host)
- 服务器的域名或IP地址:例如192.168.1.100
- 端口(port)
- webSocket默认80(ws)和443(wss)。
- 路径
- 服务器上用于WebSocket连接的具体路径
2.2 工作原理
2.2.1 握手阶段
WebSocket连接从HTPP请求开始,客户端通过HTTP升级机制请求升级协议
- 客户端发起HTTP请求,并在请求中包含特定的WebSocket字段以表示建立WebSocket连接。
GET /chat HTTP/1.1 Host:example.com Upgrade:websocket Connection:Upgrade Sec-WebSocket-Key:dGh....== Sec-WebSocket-Version: 13- Upgrade:websocket :表示希望将协议升级为WebSocket
- Connection:Upgrade 告知服务器此次连接希望协议升级
- Sec-WebSocket-Key :客户端生成的随机密钥,用于服务生成握手应答的 Sec-WebSocket-Accept
- Sec-WebSocket-Version :指定WebSocket的版本,当前标准为13
- 服务器接收请求后,返回101状态码,并确认握手信息
HTTP/1.1 101 Switching Protocals Upgrade :websocket Connection : Upgrade Sec-WebSocket-Accept:- HTTP/1.1 101 Switching Protocals : 状态行,三个部分组成
- 协议版本 :HTTP/1.1
- 状态码: 101
- 状态描述:Switching Protocals是对状态码的描述,说明服务器响应内容。
- Sec-WebSocket-Accept:由Sec-WebSocket-Key和待定算法生成的哈希,用于确认握手安全性。
- HTTP/1.1 101 Switching Protocals : 状态行,三个部分组成
2.2.2 数据帧传输
通过帧传输(帧:是客户端和服务器之间传输的数据单元)。每一帧都有固定的格式,包含数据以及控制信息,WebScoket支持以下
- 文本帧 : 用于传输文本,通常是UTF-8编码字符串
- 二进制帧 : 用于传输二进制数据,图片、音视频数据
- 关闭帧 : 用于关闭连接
- Ping和Pong :用于检测连接活跃性,ping是由客户端或服务器发送,pong由对方响应
2.2.3 保持连接与心跳
WebSocket在建立后会保持连接状态,直到一方显示关闭连接。为了防止连接由于网络问题或闲置超时而断开,WebSocket支持通过Ping-Pong机制来检查活跃性。
2.2.4连接关闭
WebSocket关闭需要双方发送一个关闭帧。关闭帧包含一个关闭码和关闭原因,可以用来表明连接关闭的原因。
常见的关闭码
- 1000 :正常关闭
- 1001:服务器或服务器因特殊原因
- 1002:协议错误
- 1003:接收不到支持的数据类型
- 1006:异常关闭
- 1007:收到不一致的数据帧。格式不正确
- 1009:发送消息超过可以接收到的大小
- 1011:服务器错误
- 10015:握手期间失败
3、WebSocket和HTTP对比
相同点
- 应用层协议:WebSocket和Http都属于应用层协议,数据传输
- 基于TCP
- 跨平台兼容
- 使用标准URL
不同点
- 连接模式:HTTP短连接,WebSocket长连接
- 通讯模式:单向(请求-响应) 初始通过HTTP后建立持久连接
- 延迟: 每次请求重新连接 一旦建立,延迟低,可实时传输数据
- 数据格式:基于文本的请求与响应,通常JSON/HTML 数据帧,支持文本和二进制
- 状态保持: 无状态(每个请求都是独立) 有状态(保持连接、允许持续交互)
应用场景
HTTP:静态网页加载、API、文件下载和上传、搜索引擎、内容管理系统
WebSocket:实时聊天应用、在线游戏、金融交易平台。
HTTP更适合请求-响应式交互吗,适合大多数常规数据传输要求。
WebSocket转为实时、双向的通讯而设计,适合需要快速响应和持续连接应用场景。
2880

被折叠的 条评论
为什么被折叠?



