发布于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握手resembles
HTTP格式,因此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程序如何知道要传递给哪个协议。
根据jfriend00
的回复,我画出下图:
因此,同一浏览器中的WebSocket和HTTP通信实际上是通过different
套接字连接进行的。虽然它们都是通过连接到服务器的端口80开始的。
我认为,如果WebSocket一词不包含套接字,则将它理解为TCP协议上的另一个应用程序级协议会更容易理解。
根据jfriend00
的进一步评论,我将以上图表细化为以下内容。我想展示的是如何coexist
在浏览器中将WebSocket通信和HTTP通信到同一服务器。
阅读此线程后,我记得服务器接受连接时服务器端口不会更改:服务器接受TCP连接时端口是否会更改?
因此,该图应如下所示:
HTTP的TCP连接和WebSocket的TCP连接应使用不同client port
的。
当服务器侦听给定端口时,它正在侦听传入的连接。当新的传入连接到达时,将为其分配自己的套接字以继续运行。该套接字提供了两个端点之间的连接。从那时起,该套接字完全独立于可能也已连接的所有其他套接字运行。
因此,一个传入的HTTP请求可以指定“ upgrade”标头并升级到webSocket,然后两端同意从此开始使用webSocket协议。同时,其他没有该升级标头的传入HTTP请求仅被视为普通的HTTP请求。
如果您不太了解webSocket协议的工作原理,请在此处全面了解它的连接方式。
主要步骤如下:
Upgrade: websocket
。Connection: Upgrade
。任何其他不包含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/
来源:前端黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 前端黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-3
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!