websocket 中的 URI 路径组件是做什么用的?
What's the URI path component in websocket used for?
客户端发起 websocket 握手,可以指定自定义 URI 路径使用。
GET **/chat** HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
websocket uri 采用以下形式:
ws-URI = "ws:" "//" host [ ":" port ] path [ "?" query ]
如果我部署了一个侦听 ws://localhost:8080/
的 websocket 服务器,并且客户端使用以下 uri ws://localhost:8080/chat
连接到那里,有什么区别?为什么甚至需要路径组件?它只是为了负载平衡吗?还是这些“端点”是孤立的?
RFC 中的以下语句让我很困惑:
GET方法[RFC2616]的“Request-URI”用于标识
WebSocket 连接的端点,两者都允许多个域
从一个 IP 地址提供服务并允许多个 WebSocket
由单个服务器提供服务的端点。 (HERE)
如果您的 websocket 服务始终以相同方式对待每个连接,则无需在 URI 中要求路径字符串或查询字符串。 (好吧,从技术上讲,您必须有一个路径字符串,但每次都可以只是单个字符“/”。)
但是,如果您的 websocket 服务希望能够为不同的客户端提供不同的内容,那么在 URI 中使用路径字符串可以方便地让客户端表明他们感兴趣的内容类型. 也许您的聊天服务为几个不同的主题提供聊天室,在这种情况下,您可能决定让客户端使用路径字符串来指示所需的主题。像 ws://localhost:8080/sport
、ws://localhost:8080/politics
或 ws://localhost:8080/cooking
之类的东西,或者你可以更进一步,得到 ws://localhost:8080/sport/football
、ws://localhost:8080/sport/golf
和 ws://localhost:8080/sport/tennis
,等等。
The "Request-URI" of the GET method [RFC2616] is used to identify the
endpoint of the WebSocket connection, both to allow multiple domains
to be served from one IP address ...
这只是普通的虚拟主机。基于 URI 的 host
部分,单个 IP 地址的网络服务器 运行 可以支持多个网站。
... and to allow multiple WebSocket endpoints to be served by a single server.
我给出的每个路径示例都标识了一个不同的、独立的端点,所有端点都由您的一个 websocket 服务器提供服务。
在这个特定的例子中,websocket 端点是某种聊天室,但更普遍的是,websocket 端点与某种数据馈送相关联,通常是单向馈送(websocket 可能提供当前库存流由 URI 查询字符串指定的某些股票集合的价格),但可能是双向提要,也可能是交互式双向提要(例如您的聊天室)。
客户端发起 websocket 握手,可以指定自定义 URI 路径使用。
GET **/chat** HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Origin: http://example.com
Sec-WebSocket-Protocol: chat, superchat
Sec-WebSocket-Version: 13
websocket uri 采用以下形式: ws-URI = "ws:" "//" host [ ":" port ] path [ "?" query ]
如果我部署了一个侦听 ws://localhost:8080/
的 websocket 服务器,并且客户端使用以下 uri ws://localhost:8080/chat
连接到那里,有什么区别?为什么甚至需要路径组件?它只是为了负载平衡吗?还是这些“端点”是孤立的?
RFC 中的以下语句让我很困惑:
GET方法[RFC2616]的“Request-URI”用于标识 WebSocket 连接的端点,两者都允许多个域 从一个 IP 地址提供服务并允许多个 WebSocket 由单个服务器提供服务的端点。 (HERE)
如果您的 websocket 服务始终以相同方式对待每个连接,则无需在 URI 中要求路径字符串或查询字符串。 (好吧,从技术上讲,您必须有一个路径字符串,但每次都可以只是单个字符“/”。)
但是,如果您的 websocket 服务希望能够为不同的客户端提供不同的内容,那么在 URI 中使用路径字符串可以方便地让客户端表明他们感兴趣的内容类型. 也许您的聊天服务为几个不同的主题提供聊天室,在这种情况下,您可能决定让客户端使用路径字符串来指示所需的主题。像 ws://localhost:8080/sport
、ws://localhost:8080/politics
或 ws://localhost:8080/cooking
之类的东西,或者你可以更进一步,得到 ws://localhost:8080/sport/football
、ws://localhost:8080/sport/golf
和 ws://localhost:8080/sport/tennis
,等等。
The "Request-URI" of the GET method [RFC2616] is used to identify the endpoint of the WebSocket connection, both to allow multiple domains to be served from one IP address ...
这只是普通的虚拟主机。基于 URI 的 host
部分,单个 IP 地址的网络服务器 运行 可以支持多个网站。
... and to allow multiple WebSocket endpoints to be served by a single server.
我给出的每个路径示例都标识了一个不同的、独立的端点,所有端点都由您的一个 websocket 服务器提供服务。
在这个特定的例子中,websocket 端点是某种聊天室,但更普遍的是,websocket 端点与某种数据馈送相关联,通常是单向馈送(websocket 可能提供当前库存流由 URI 查询字符串指定的某些股票集合的价格),但可能是双向提要,也可能是交互式双向提要(例如您的聊天室)。