本站消息

站长简介/公众号

  出租广告位,需要合作请联系站长


+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

暂无数据

为什么WebSocket可以在“握手”之后与HTTP共享80端口?

发布于2021-04-19 07:06     阅读(372)     评论(0)     点赞(20)     收藏(4)


我认为:

  • 端口指定服务器上的程序。
  • 当我们说的时候to share a port,它实际上意味着to have the requests processed by the same program listening on that port

WebSocket握手resemblesHTTP格式,因此can处理HTTP协议的服务器程序可以理解因此可以将握手请求发送到port 80

但是after the handshake,WebSocket数据格式与HTTP格式完全不同,如何仍将其发送到端口80?例如通过如下网址:

ws://somehost:80/chat

如何运作?

我猜:

HTTP程序是否在端口80上看到传入的请求cannot be handled as HTTP,然后将其传递给WebSocket程序进行处理。如果是这样,如果还有其他一些协议想要共享端口80,例如WebSocket2,那么如果没有办法识别正在使用的协议,HTTP程序如何知道要传递给哪个协议。

加1

根据jfriend00的回复,我画出下图:

因此,同一浏览器中的WebSocket和HTTP通信实际上是通过different套接字连接进行的。虽然它们都是通过连接到服务器的端口80开始的。

我认为,如果WebSocket一词不包含套接字,则将它理解为TCP协议上的另一个应用程序级协议会更容易理解。

在此处输入图片说明

加2

根据jfriend00的进一步评论,我将以上图表细化为以下内容我想展示的是如何coexist在浏览器中将WebSocket通信和HTTP通信到同一服务器

在此处输入图片说明

加3

阅读此线程后,我记得服务器接受连接时服务器端口不会更改:服务器接受TCP连接时端口是否会更改?

因此,该图应如下所示:

HTTP的TCP连接和WebSocket的TCP连接应使用不同client port的。

在此处输入图片说明


解决方案


当服务器侦听给定端口时,它正在侦听传入的连接。当新的传入连接到达时,将为其分配自己的套接字以继续运行。该套接字提供了两个端点之间的连接。从那时起,该套接字完全独立于可能也已连接的所有其他套接字运行。

因此,一个传入的HTTP请求可以指定“ upgrade”标头并升级到webSocket,然后两端同意从此开始使用webSocket协议。同时,其他没有该升级标头的传入HTTP请求仅被视为普通的HTTP请求。

如果您不太了解webSocket协议的工作原理,请在此处全面了解它的连接方式

主要步骤如下:

  1. 请求WebSocket连接的客户端将HTTP请求发送到端口80上的服务器。
  2. 该HTTP请求是一个完全合法的HTTP请求,但其中包含一个标头Upgrade: websocket
  3. 如果服务器支持webSocket协议,则它将以合法的HTTP响应进行响应,并带有包含header的101状态代码Connection: Upgrade
  4. 然后,双方将协议切换到webSocket协议,并且该套接字上的所有将来通信都使用webSocket帧的数据格式来完成。

任何其他不包含upgrade请求标头的传入HTTP请求都被视为普通HTTP请求。

HTTP程序是否看到端口80上的传入请求无法作为HTTP处理,然后将其传递给WebSocket程序进行处理。

不,第一个请求是合法的HTTP请求(只是其中带有特殊的标头),发回的响应是合法的HTTP响应。但是,在做出响应之后,双方都将协议切换到了webSocket。因此,使用自定义标头来告知Web服务器此传入的HTTP请求是建立WebSocket连接的第一步。

如果是这样,如果还有其他一些协议想要共享端口80,例如WebSocket2,那么如果没有办法识别正在使用的协议,HTTP程序如何知道要传递给哪个协议。

尽管我不知道其他任何标准化的upgrade协议,Upgrade: someOtherProtocol只要指定一个不同的协议名称,机制也可以用于支持其他协议




所属网站分类: 技术文章 > 问答

作者:黑洞官方问答小能手

链接:http://www.qianduanheidong.com/blog/article/70381/a5c83133dd9bb7c9b1b9/

来源:前端黑洞网

任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

20 0
收藏该文
已收藏

评论内容:(最多支持255个字符)