| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> 《轩轩计算机网络笔记》——WebSocket -> 正文阅读 |
|
[网络协议]《轩轩计算机网络笔记》——WebSocket |
文章目录题引开篇有了HTTP,为什么还要用WebSocket呢? WebSocketWebSocket概述WebSocket是基于TCP的轻量级网络通信协议,地位上与HTTP是对等的。 WebSocket的诞生是为了解决HTTP的缺陷。在学HTTP2的时候,以及优化了HTTP的某些缺陷了,如队首阻塞问题,而WebSocket主要是优化”请求-应答“通信模式的问题。 那“请求-应答”的通信模式有什么问题呢? “请求-应答”模式存在的问题
这就导致HTTP难以应用在动态页面、即时消息、网路游戏等要求“实时通信”的领域。
WebSocket的特点WebSocket的特点主要有三个:
"全双工"通道这个好像没什么好说的,就是全双工,使得实时通信的效率更高了。 二进制帧结构WebSocket的语法、语义和HTTP完全不一样。 WebSocket的头部有四部分组成:
具体可以看看下面这张帧结构图:
服务发现WebSocket沿用HTTP的URI格式,但不同的是,WebSocket使用“ws”和“wss”作为URI格式的开头协议名,分别表示明文和加密的WebSocket协议。默认端口为80和443。 WebSocket的握手WebSocket利用了 HTTP 本身的“协议升级”特性,“伪装”成 HTTP,这样就能绕过浏览器沙盒、网络防火墙等等限制,这也是 WebSocket 与 HTTP 的另一个重要关联点。 客户端请求WebSocket 的握手是一个标准的 HTTP GET 请求,但要带上两个协议升级的专用头字段:
另外,为了防止普通的 HTTP 消息被“意外”识别成 WebSocket,握手消息还增加了两个额外的认证用头字段(所谓的“挑战”,Challenge):
服务器升级协议服务器收到 HTTP 请求报文,看到上面的四个字段,就知道这不是一个普通的 GET 请求,而是 WebSocket 的升级请求,于是就不走普通的 HTTP 处理流程,而是构造一个特殊的“101 Switching Protocols”响应报文,通知客户端,接下来就不用 HTTP 了,全改用 WebSocket 协议通信。(有点像 TLS 的“Change Cipher Spec”)。 服务器响应WebSocket 的握手响应报文也是有特殊格式的,要用字段“Sec-WebSocket-Accept”验证客户端请求报文,同样也是为了防止误连接。 具体的做法是把请求头里“Sec-WebSocket-Key”的值,加上一个专用的 UUID “258EAFA5-E914-47DA-95CA-C5AB0DC85B11”,再计算 SHA-1 摘要。
客户端收到响应报文,就可以用同样的算法,比对值是否相等,如果相等,就说明返回的报文确实是刚才握手时连接的服务器,认证成功。 握手完成,后续传输的数据就不再是 HTTP 报文,而是 WebSocket 格式的二进制帧了。 WebSocket的一些缺点回的报文确实是刚才握手时连接的服务器,认证成功。 握手完成,后续传输的数据就不再是 HTTP 报文,而是 WebSocket 格式的二进制帧了。 WebSocket的一些缺点WebSocket 虽然是在应用层,但使用方式却与“TCP Socket”差不多,过于“原始”,用户必须自己管理连接、缓存、状态,开发上比 HTTP 复杂的多。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 8:49:40- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |