WebSocket(WS)协议系列(一)基本概念

ws协议是什么?

WebSocket(WS)协议是一种网络通信协议,提供了全双工、单连接、低延迟的通信方式,通常用于浏览器和服务器之间的实时数据交换。与传统的HTTP协议相比,WebSocket允许在客户端和服务器之间建立持续的连接 ,可以在连接建立后双向发送消息,而不需要每次都重新建立连接。

基于什么协议而来的呢?

WebSocket协议是通过HTTP协议的"握手"过程来初始化的。具体来说,WebSocket协议通过HTTP的Upgrade头部来进行升级。这样,客户端首先通过HTTP向服务器发起请求,服务器响应后,如果同意升级,HTTP连接就会转换为WebSocket连接。

在建立WebSocket连接的初始阶段,客户端和服务器进行一次HTTP握手,确保通信双方都支持WebSocket协议。一旦握手成功,HTTP协议就不再参与数据传输,后续的数据交换是通过WebSocket协议进行的。

为什么可以解决HTTP协议的非持续连接问题?怎么解决的?

HTTP协议是基于请求-响应模型的,也就是说,

1.频繁的连接建立和断开: 每次客户端向服务器发起请求时,服务器都会建立一个新的连接,并在响应完成后关闭连接。

2.无法实现双向通信:客户端发送请求后只能等待服务器响应,无法主动向服务器发送数据。

WebSocket通过"升级"HTTP连接并保持持久连接,避免了HTTP协议每次请求都建立新连接的开销,并提供了双向通信能力。

持久连接: WebSocket连接在建立后会保持打开状态,直到客户端或服务器主动关闭连接。这避免了每次请求都需要重新建立连接的开销。

全双工通信: WebSocket允许客户端和服务器在同一个连接上进行双向通信。客户端不仅可以发送请求,还可以随时接收来自服务器的消息,反之亦然。这让实时数据传输成为可能,比如即时消息、股票行情更新等。

WebSocket如何保持持久连接?

WebSocket通过TCP连接来保持持久连接。TCP是一个面向连接的协议,它在客户端和服务器之间建立一个稳定的连接,直到主动断开。因此,WebSocket利用TCP的特性保持连接持续开放。

既然通过TCP进行保持,使用TCP握手不行吗,为什么还要使用HTTP握手呢?

  1. 浏览器的支持与安全性:
    浏览器本身通常只能直接支持HTTP和HTTPS 协议。
    通过HTTP握手,WebSocket连接可以更好地遵守浏览器的同源策略,并允许跨域通信。HTTP握手阶段通过HTTP头信息来进行跨域控制,从而使WebSocket能够更安全地在跨域环境中使用。
  2. HTTP协议的广泛支持:
    普遍存在: HTTP协议是互联网上最常见的协议,几乎所有的服务器和客户端都支持。通过HTTP的握手,WebSocket可以利用现有的基础设施进行初步的连接
    端口的兼容性: 默认情况下,HTTP协议使用80端口,HTTPS使用443端口,而WebSocket的默认端口是80(非加密)或443(加密)。因为HTTP和HTTPS协议通常已经在网络防火墙或代理中得到支持,WebSocket的HTTP握手使得WebSocket连接更容易穿透这些中间设备
  3. TCP握手的局限性:
    TCP协议本身确实也支持持久连接,但它并不具备像HTTP协议那样的协议协商机制。通过HTTP的握手,客户端和服务器可以协商一些WebSocket协议相关的特性 ,比如:
    协议版本: 在HTTP请求头中,可以指明使用的WebSocket版本以及其他的协议选项。
    安全性(加密): WebSocket也可以通过HTTP的握手阶段来协商是否使用加密(即wss://与ws://),确保数据传输的安全性。

下面看个小栗子:

WebSocket使用HTTP协议进行握手的具体流程。

1.客户端发起请求:客户端通过HTTP协议发起一个带有特定头部(如Upgrade : websocket和Connection: Upgrade)的请求,表示希望将连接升级为WebSocket协议。

复制代码
GET /chat HTTP/1.1
Host: example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlbG9naW5nCg==
Sec-WebSocket-Version: 13

2.服务器响应:

如果服务器支持WebSocket协议,它会通过HTTP响应返回一个"101 Switching Protocols"的状态码,并在响应头中确认协议升级

复制代码
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

3.协议切换: 一旦握手成功,客户端和服务器之间的通信就不再使用HTTP协议,而是切换到WebSocket协议,这时可以开始进行持久的、双向的实时通信。

相关推荐
数据知道18 小时前
SSTI 模板注入:Jinja2 沙箱逃逸实战
网络·安全·网络安全
m0_7494922218 小时前
化工反应釜维护作业口罩选型方案
人工智能·网络协议
瀚高PG实验室18 小时前
几种因网络波动导致应用与数据库操作异常的现象
运维·网络·数据库·postgresql·瀚高数据库
风曦Kisaki18 小时前
# Kubernetes(K8s)笔记Day15:K8s网络工作原理【Pod 网络模型,CNI 网络插件,Calico 工作模式详解,BGP协议,路由反射器】
运维·网络·nginx·云原生·容器·kubernetes
allforgood18 小时前
管理 SELinux 安全性
linux·运维·网络
Fnetlink118 小时前
Fnet 云网安 260810
网络·安全·web安全
Safeploy安策数据18 小时前
网络保密机如何部署?破解敏感数据跨域流转安全难题
网络·安全
xixiaoyunya20 小时前
移动办公场景下手机远程访问内网设备的技术方案选型与实践
网络·智能手机·智能路由器
caimouse1 天前
TDI (传输驱动接口 Transport Driver Interface) 详细分析
网络协议
weixin_446260851 天前
从被动镜像到主动智能体:面向网络物理人工智能的整体论数字孪生(HDT-Net)
网络·人工智能