悠扬随风 发表于 2024-8-21 07:14:51

WebSocket协议解析

一、HTTP协议与HTTPS协议

1.HTTP协议的用处

HTTP (Hypertext Transfer Protocol, 超文本传输协议) 是一种用于从网络服务器传输超文本到当地浏览器的传输协议。它确保了高效且准确的信息传输,并定义了在数据通信过程中客户端与服务器之间的交互行为。


[*]Web浏览: 当用户在浏览器地址栏输入网址或点击链接时,客户端向服务器发送一个HTTP请求以获取资源。服务器相应这些请求并返回HTML页面,浏览器再将这些页面渲染成可视化的网页。
[*]数据互换: HTTP支持多种数据类型的传输,包括但不限于图像、视频、文本和其他多媒体内容。这使得Web应用步伐能够提供丰富的用户体验。
2.HTTP协议的特点



[*]无状态协议: HTTP是一种无状态协议,意味着每次毗连只处置惩罚一个请求,服务器不会保留关于客户端的任何状态信息。这种计划简化了服务器的实现,但也大概导致一些必要维护状态的应用步伐必要使用cookies或session来跟踪用户会话。
[*]机动: HTTP答应传输恣意类型的数据对象,而且可以通过差别的MIME类型来标识数据格式。
[*]简单快速: HTTP请求方法简洁明了,服务器通常能够迅速相应这些请求。
[*]基于文本: 所有命令和消息都是纯文本情势,易于调试和理解。
3.HTTP协议的工作流程



[*]HTTP协议是基于TCP/IP模子的应用层协议:
https://i-blog.csdnimg.cn/direct/913c5d4f933e4ff48adcacf04526ce58.png
一个典范的HTTP请求由以下几个部分构成:


[*]请求行: 包含请求的方法(GET、POST等)、请求的URL和使用的HTTP版本。
[*]请求头: 包含客户端信息、认证信息以及其他用于控制请求行为的元数据。
[*]空行: 分隔请求头和请求体。
[*]请求体: 可选部分,包含了请求的数据,例如表单提交的数据。
HTTP相应同样也包含以下几个部分:


[*]状态行: 包含HTTP版本、状态码及描述该状态码的文字说明。
[*]相应头: 包含服务器信息、认证信息及其他控制相应行为的元数据。
[*]空行: 分隔相应头和相应体。
[*]相应体: 包含了服务器相应的数据,如HTML文档或其他类型的文件。


[*]用户从在浏览器输入url请求资源,到获得资源并渲染在页面上的完备流程:

[*] URL 解析和域名解析:

[*]用户在浏览器地址栏输入URL。
[*]浏览器解析URL,提取协议、主机名、端口(如未指定则使用默认端口)、路径和查询字符串。
[*]浏览器举行域名系统(DNS)查找,将域名转换为对应的IP地址。

[*] 建立TCP毗连:

[*]浏览器与服务器建立TCP毗连,这涉及到三次握手过程。

[*] 发起HTTP请求:

[*]若URL使用HTTP协议,浏览器会直接发送HTTP请求。
[*]若URL使用HTTPS协议,浏览器会先与服务器建立安全毗连,包括SSL/TLS握手,然后加密的HTTP请求通过该安全毗连传输。

[*] 服务器处置惩罚请求:

[*]服务器接收到请求后,根据请求的资源类型和路径等信息处置惩罚请求。
[*]假如请求的是静态资源(如HTML、CSS、JavaScript文件),服务器会直接从文件系统中读取并返回。
[*]假如请求的是动态资源,服务器大概必要运行相关的应用步伐或脚本来生成相应内容。

[*] 返回HTTP相应:

[*]服务器将请求的资源或生成的页面作为HTTP相应返回给客户端。
[*]HTTP相应包含状态码、相应头和相应体。

[*] 浏览器处置惩罚相应:

[*]浏览器解析相应,根据状态码确认是否成功获取资源。
[*]对于HTML文档,浏览器开始解析HTML并构建DOM(文档对象模子)。
[*]遇到链接到外部资源(如CSS、JavaScript、图片等)的标签,浏览器会再次发起请求下载这些资源。

[*] 渲染页面:

[*]浏览器根据DOM和CSSOM(CSS对象模子)渲染页面,这是渲染引擎的工作。
[*]JavaScript文件被实行,大概会对页面内容和结构举行动态修改。

[*] 显示结果:

[*]浏览器在解析完HTML、CSS和实行完JavaScript后,将终极的页面出现给用户。

[*] 关闭毗连:

[*]一旦页面渲染完毕,浏览器通常会关闭与服务器的TCP毗连,但在恒久毗连(keep-alive)的环境下,此毗连大概会保持打开状态以供后续请求使用。

整个过程涉及网络通信、协议解析、安全加密、数据处置惩罚和页面渲染等多个环节,每个环节都对网页加载性能有重要影响。
https://i-blog.csdnimg.cn/direct/97479a231eeb47d390c2c74b82a382a1.png
4.HTTPS协议的用处

HTTPS (Hypertext Transfer Protocol Secure) 是HTTP的安全版本,它在HTTP的基础上加入了SSL/TLS层,主要用于必要高度安全性的网站,好比银行、电子商务网站等,以确保用户的信息安全。


[*]加密通信: 使用SSL/TLS协议对数据举行加密,以防止数据在传输过程中被截获或监听。
[*]身份验证: 通过数字证书验证服务器的身份,确保用户访问的是合法的网站,从而防止中心人攻击。
[*]数据完备性: 保证数据在传输过程中的完备性和未被篡改。
5.HTTPS协议的特点



[*]安全性: 通过加密技术来保护传输的数据,防止数据被偷取或篡改。
[*]认证: 通过数字证书来验证通信双方的身份,确保其真实性。
[*]可靠性: 提供数据的完备性校验,确保接收到的信息是完备无误的。
6.HTTPS协议的工作流程

HTTPS在HTTP的基础上通过SSL或TLS举行加密处置惩罚。
https://i-blog.csdnimg.cn/direct/68a5f47450fa45399da63961033404dc.png
SSL/TLS协议在传输数据之前,会先在客户端和服务器之间建立一条加密通道。


[*]HTTPS通过以下步调确保安全通信:

[*]客户端发起TCP毗连请求;
[*]服务器相应TCP毗连;
[*]客户端和服务器举行SSL/TLS握手:

[*]客户端向服务器发送“Client Hello”消息,此中包含客户端支持的SSL/TLS版本和加密套件列表。
[*]服务器选择一个加密套件,并发送“Server Hello”消息,确认所选的加密套件,并附带本身的数字证书。
[*]客户端验证服务器的数字证书,并生成一个随机数作为会话密钥,然后使用服务器公钥加密此会话密钥后发送给服务器。
[*]服务器解密会话密钥,并确认密钥已接收。

[*]握手成功后,加密的HTTP数据传输开始;
[*]通讯完成后,断开毗连。
总之,HTTP和HTTPS构成了互联网通信的基础,而随着网络安全意识的进步,HTTPS正逐步取代传统的HTTP成为主流的网络通信协议,为用户提供更安全的网络环境。
二、WebSocket协议出现的原因

WebSocket技术的出现主要是为相识决传统HTTP协议在实现实时双向通信方面存在的不敷,进步通信效率并简化应用开辟。


[*] 降服HTTP轮询的范围性:
传统HTTP协议下的轮询机制要求浏览器定期向服务器发起HTTP请求以获取更新,这种方式不仅效率低下,而且斲丧大量带宽资源。
HTTP请求头部较长,而现实传输的有效数据往往较少,导致资源浪费严峻。
[*] 实现实时双向通信的需求:
随着互联网应用的发展,对于即时消息、在线游戏等必要实时双向通信的应用场景越来越多。
传统HTTP协议无法满足服务器主动向客户端推送数据的需求,限制了这类应用的实现。
[*] 进步通信效率:
WebSocket协议仅需一次握手即可建立恒久毗连,之后客户端与服务器之间可以直接举行高效的数据互换。
这种全双工(full-duplex)的通信方式极大地进步了数据传输的速率和效率。
[*] 简化开辟复杂度:
WebSocket作为一种新的协议,旨在简化实时通信应用的开辟,避免了频仍的HTTP请求和相应带来的复杂性和性能瓶颈。
1. 传统的HTTP请求-相应模子



[*]特点:传统的Web应用主要基于HTTP协议,采取请求-相应模子。浏览器(客户端)发送请求到服务器,服务器处置惩罚请求后返回相应。
[*]限制:HTTP是单向通信,只能由客户端发起请求,服务器被动相应,无法主动推送数据给客户端。
2. 轮询(Polling)



[*]背景:随着Web应用的多样化,特殊是对实时数据的需求增加,开辟者开始寻求方法让服务器能够“推送”数据给客户端。
[*]方法:客户端定期(例如每几秒钟)向服务器发送HTTP请求查询是否有新数据。
[*]限制:轮询会增加服务器负载,同时由于HTTP请求头较大,造成带宽浪费。此外,频仍的请求也会影响用户体验。
3. 长轮询(Long Polling)



[*]改进:为相识决轮询带来的题目,长轮询技术应运而生。
[*]方法:客户端发起请求后,服务器在没有新数据时保持毗连打开状态,直到有新数据时才返回相应。
[*]优点:相比普通轮询,减少了不必要的请求次数,进步了效率。
[*]限制:仍然基于HTTP协议,存在毗连保持时间的限制,且服务器资源占用较多。
4. Server-Sent Events (SSE)



[*]介绍:SSE是一种简单的服务器推送技术,答应服务器向客户端发送事件更新。
[*]方法:服务器通过HTTP毗连持续发送数据流到客户端,客户端监听这些事件并做出相应。
[*]适用场景:适用于只必要服务器向客户端推送数据的场景,如股票价格更新或新闻流。
[*]限制:仅支持单向通信,即服务器到客户端的通信。
5. WebSocket



[*]背景:随着Web应用对实时双向通信的需求日益增长,必要一种更加高效、低延迟的通信方式。
[*]特点:

[*]WebSocket协议是在HTML5中引入的,它提供了一种在客户端和服务器之间建立恒久毗连的方式。
[*]一旦毗连建立,双方就可以自由地发送数据,实现了全双工通信。
[*]WebSocket基于TCP/IP协议,使用HTTP举行握手,之后转换为二进制帧传输数据,大大减少了通信开销。
[*]WebSocket毗连一旦建立,就可以恒久保持,减少了频仍建立和关闭毗连的开销。

三、WebSocket协议解析

1.特点

WebSocket协议是一种在单个TCP毗连上举行全双工通信的协议。它被计划用于替代HTTP协议中的轮询请求,以提供更高效的实时数据传输服务。以下是WebSocket协议的一些主要特点:
全双工通信:


[*]WebSocket答应服务器和客户端双向通信,即数据可以同时从客户端发送到服务器端,也可以从服务器端发送到客户端。
恒久毗连:


[*]一旦WebSocket毗连建立后,就会保持打开状态,直到此中一方关闭毗连。这使得实时应用的延迟大大低落。
减少开销:


[*]相比于HTTP轮询,WebSocket减少了每次消息互换所需的头部巨细和其他开销,进步了数据传输效率。
高效的数据传输:


[*]WebSocket使用二进制帧格式传输数据,可以有效减少文本格式如JSON或XML带来的额外负载。
支持多种类型的数据:


[*]WebSocket不仅可以传输文本数据(UTF-8编码),还可以传输二进制数据(如图片、音频和视频等)。
心跳机制:


[*]WebSocket定义了心跳机制来检测毗连是否仍然活动,以避免不必要的重连。
安全性:


[*]WebSocket支持加密毗连(wss://),可以通过TLS/SSL协议保护数据传输的安全性。
多路复用:


[*]只管WebSocket本身不直接支持多路复用,但可以在一个毗连上通过差别的标识符来区分差别的会话或数据流。
跨平台兼容性:


[*]WebSocket协议在现代浏览器中得到广泛支持,而且可以在服务器端使用多种编程语言实现。
简单易用:


[*]WebSocket API简单直观,易于开辟人员理解和使用。
2.建立毗连和数据通信

WebSocket协议建立毗连的过程是一个比较典范的握手过程,它基于HTTP协议来完成。以下是WebSocket毗连建立的详细步调:
第一步: 客户端发起HTTP请求


[*]请求发起:

[*] 客户端通过HTTP发起一个特殊的GET请求到服务器,该请求包含特定的Upgrade头,表明希望升级到WebSocket协议。
[*] 请求行示例:
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Version: 13

[*] 此中Sec-WebSocket-Key是一个随机生成的Base64编码的值,用于后续的握手验证。
[*] Sec-WebSocket-Version指定使用的WebSocket版本,目前标准版本为13。

第二步: 服务器相应


[*]相应确认:

[*] 假如服务器同意升级到WebSocket协议,则返回一个HTTP状态码101 Switching Protocols的相应。
[*] 相应示例:
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

[*] Sec-WebSocket-Accept字段包含了客户端发送的Sec-WebSocket-Key经过处置惩罚后的结果。处置惩罚方式是将Sec-WebSocket-Key与一个固定的258EAFA5-E914-47DA-95CA-C5AB0DC85B11 GUID拼接,然后盘算SHA-1哈希,最后再举行Base64编码。

第三步: 握手完成


[*]握手完成:

[*]当客户端收到服务器的相应,并验证了Sec-WebSocket-Accept字段正确无误后,就完成了握手过程。
[*]此时,毗连已升级为WebSocket毗连,可以开始举行双向通信。

第四步: 数据传输


[*]数据帧格式:

[*]WebSocket使用帧来传输数据。每个帧由一个固定长度的头部和一个可变长度的有效载荷构成。
[*]头部包括帧类型(例如文本、二进制或控制帧)、掩码标记以及掩码键(仅当客户端向服务器发送数据时必要掩码)。



[*]掩码标记以及掩码键:
在WebSocket协议中,掩码标记和掩码键是用来保护客户端到服务器的数据不被中心人窥探的安全措施。详细来说:
掩码标记 (Mask Bit)


[*] 定义:掩码标记是一个位标记,用来指示WebSocket帧中的有效载荷数据是否已经被掩码(即加密)。这个标记位于WebSocket帧头部的第一个字节中,它是第7个比特位(从右向左计数)。
[*] 值:假如掩码标记设置为1,则表示有效载荷数据已经被掩码;假如掩码标记设置为0,则表示数据未被掩码。在客户端向服务器发送数据时,掩码标记总是设置为1;而在服务器向客户端发送数据时,掩码标记总是设置为0。
掩码键 (Masking Key)


[*] 定义:掩码键是一个4字节的随机值,用于对客户端发送给服务器的数据举行掩码处置惩罚。掩码键紧随掩码标记之后出现在WebSocket帧头部。
[*] 使用方法:掩码键用于对有效载荷数据举行XOR利用。详细而言,每4个字节的数据使用掩码键的一个字节来举行XOR利用。例如,第一个字节的数据与掩码键的第一个字节举行XOR,第二个字节的数据与掩码键的第二个字节举行XOR,依此类推。当数据长度不是4的倍数时,最后一个掩码键字节会被重复使用直到数据结束。
掩码利用示例

假设掩码键为 0x12 0x34 0x56 0x78,而且要发送的有效载荷数据为 0x00 0x01 0x02 0x03 0x04 0x05 0x06 0x07,那么掩码利用过程如下:


[*]第1字节:0x00 XOR 0x12 = 0x12
[*]第2字节:0x01 XOR 0x34 = 0x35
[*]第3字节:0x02 XOR 0x56 = 0x56
[*]第4字节:0x03 XOR 0x78 = 0x7b
[*]第5字节:0x04 XOR 0x12 = 0x16 (掩码键循环)
[*]第6字节:0x05 XOR 0x34 = 0x37
[*]第7字节:0x06 XOR 0x56 = 0x5e
[*]第8字节:0x07 XOR 0x78 = 0x7f
因此,掩码后的数据为 0x12 0x35 0x56 0x7b 0x16 0x37 0x5e 0x7f。
当服务器接收到这个掩码后的数据时,它会使用相同的掩码键来反掩码(解密)这些数据,从而恢复出原始数据。
掩码机制确保了客户端到服务器的数据不会在传输过程中被轻易读取,增加了通信的安全性。

[*]数据传输:

[*]双方可以开始发送数据帧。文本数据通常使用UTF-8编码,而二进制数据则按原样传输。
[*]控制帧用于特殊目的,好比关闭毗连(Close帧)、ping和pong(Ping帧和Pong帧)等。

第五步: 毗连关闭


[*]关闭毗连:

[*]任何一方都可以发送一个Close帧来请求关闭毗连。
[*]接收方接收到Close帧后,可以选择发送本身的Close帧作为相应。
[*]终极,双方都发送完数据后,会关闭TCP毗连。


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: WebSocket协议解析