首页 > 其他分享 >计算机基础_WebSocket以及从URL到页面展示过程

计算机基础_WebSocket以及从URL到页面展示过程

时间:2023-03-06 09:03:07浏览次数:39  
标签:HTTP URL 报文 服务器 WebSocket 客户端 连接 页面

理解WebSocket协议的底层原理

websocket本质上是一种计算机网络应用层的协议,用来弥补http协议在持久通信能力上的不足。虽然http有了keep-alive,但是本质上http请求还是请求完连接就断开了,并且服务器是不能主动给客户端发送数据的。

Websocket是应用层第七层上的一个应用层协议,它必须依赖 HTTP 协议进行一次握手 ,握手成功后,数据就直接从 TCP 通道传输,与 HTTP 无关了。

websocket分为握手和数据传输阶段,即进行了HTTP握手 + 双工的TCP连接。

握手阶段

客户端发送消息

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

服务端返回消息

HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
这里值得注意的是Sec-WebSocket-Accept的计算方法
base64(hsa1(sec-websocket-key + 258EAFA5-E914-47DA-95CA-C5AB0DC85B11))
如果这个Sec-WebSocket-Accept计算错误浏览器会提示:Sec-WebSocket-Accept dismatch
如果返回成功,Websocket就会回调onopen事件

传输阶段

Websocket的数据传输是frame形式传输的,比如会将一条消息分为几个frame,按照先后顺序传输出去。这样做会有几个好处:

  • a、大数据的传输可以分片传输,不用考虑到数据大小导致的长度标志位不足够的情况。
  • b、和http的chunk一样,可以边生成数据边传递消息,即提高传输效率。

HTTP与websocket的区别

WebSocket是双向的,在客户端-服务器通信的场景中使用的全双工协议,与HTTP不同,它以ws://wss://开头。它是一个有状态协议,这意味着客户端和服务器之间的连接将保持活动状态,直到被任何一方(客户端或服务器)终止。在通过客户端和服务器中的任何一方关闭连接之后,连接将从两端终止。

让我们以客户端-服务器通信为例,每当我们启动客户端和服务器之间的连接时,客户端-服务器进行握手随后创建一个新的连接,该连接将保持活动状态,直到被他们中的任何一方终止。建立连接并保持活动状态后,客户端和服务器将使用相同的连接通道进行通信,直到连接终止。

新建的连接被称为WebSocket。一旦通信链接建立和连接打开后,消息交换将以双向模式进行,客户端-服务器之间的连接会持续存在。如果其中任何一方(客户端服务器)宕掉或主动关闭连接,则双方均将关闭连接。套接字的工作方式与HTTP的工作方式略有不同,状态代码101表示WebSocket中的交换协议。

 

从输入URL到页面展示,发生了什么?

1.解析URL,解析 URL 得到里面的参数,将域名和需要请求的资源分离开来,从而了解需要请求的是哪个服务器,请求的是服务器上什么资源等等。

 

 

2.浏览器封装HTTP请求报文

URL 进行解析之后,浏览器确定了目标服务器和文件名,接下来就需要根据这些消息「封装」成一个 HTTP 请求报文发送出去。

 

 3.DNS域名解析获取IP地址

首先搜索浏览器缓存、操作系统缓存,本地域名服务器(注意:主机和本地域名服务器之间的查询方式是「递归查询」)、(注意:本地域名服务器和其他域名服务器之间的查询方式是迭代查询,防止根域名服务器压力过大)后面一连串的查询

本地域名服务器将得到的IP地址返回给操作系统,同时自己将IP地址缓存起来,操作系统再返回给浏览器IP地址。

4.建立TCP连接

获取到了目标服务器的 IP 地址之后,浏览器就知道我等下请求要发给谁了,这个时候就可以开始发送封装好了的 HTTP 请求报文了,那么既然需要发送请求,必然就需要 TCP 通过三次握手为浏览器和服务器之间建立可靠的连接。

5.浏览器发起请求

HTTP 请求报文或者响应报文在 TCP 连接通道上进行传输的时候,由于这些报文比较大,为了更容易和准确可靠的传输,「TCP 会将 HTTP 报文按序号分割成若干报文段并加上 TCP 首部,分别进行传输。接收方在收到这些报文段后,按照序号以原来的顺序重组 HTTP 报文」

6.期间是IP协议以及ARP协议完成传输以及MAC地址通信

7.服务器响应请求。

HTTP 请求报文或者响应报文在 TCP 连接通道上进行传输的时候,由于这些报文比较大,为了更容易和准确可靠的传输,「TCP 会将 HTTP 报文按序号分割成若干报文段并加上 TCP 首部,分别进行传输。接收方在收到这些报文段后,按照序号以原来的顺序重组 HTTP 报文」

8.断开TCP连接

10.浏览器渲染页面

 

标签:HTTP,URL,报文,服务器,WebSocket,客户端,连接,页面
From: https://www.cnblogs.com/alwaysrun/p/17182541.html

相关文章