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协议,这时可以开始进行持久的、双向的实时通信。

相关推荐
Ivanqhz1 小时前
SVD++算法
java·服务器·网络·深度学习·神经网络
迪康Defender3 小时前
终端安全实战:如何高效解决企业U盘泄密与管控难题
运维·网络·安全·web安全·终端安全管理
网安小学生(兼顾数据库版)3 小时前
固件+软件供应链:ONEKEY+Mend如何实现全链路安全覆盖
网络·安全·web安全
学习中的码虫4 小时前
网络编程5
服务器·网络
GPU实战笔记5 小时前
本地跑不动 llama.cpp,临时租云 GPU 怎么搭?从启动服务到环境复用
java·服务器·网络·人工智能·深度学习·llama
发量惊人的中年网工5 小时前
2026年DDoS防护方案怎么选?从攻击响应、清洗位置到成本账单,解析全球高防方案
大数据·网络·安全·ddos
黄昏回响7 小时前
软件工程基础知识(五):软件测试详解(下篇)——现代测试实践与论文指导
网络·其他·软件工程·改行学it
万联WANFLOW8 小时前
网络排障:如何从延迟、丢包、带宽定位海外访问异常
网络·架构·业界资讯
zzzyyy5389 小时前
TCP 协议学习笔记:从报文格式到异常处理
linux·网络
心易行者9 小时前
Python在线运行+SQLite数据库实战:0成本搭个人数据后台,5个场景直接套用
前端·网络·人工智能·python