注册特殊 URI 方案:
ws
和 wss
的原因是什么?
我简单地阅读了规格,没有找到任何有关此更改的原因。
https://www.rfc-editor.org/rfc/rfc6455#section-11.1
WebSocket 客户端发送特殊标头(
Connection: Upgrade
、Upgrade: websocket
),让您可以相对轻松地确定这是普通 HTTP 请求(GET
、POST
...等)还是 WebSocket 连接请求。
为什么 WebSocket 不能使用
http
和 https
方案工作?
我没有加入董事会或任何其他人,但这里有 2 美分...:
协议的握手当前使用 HTTP(S) 来建立连接,但这只是 HTTP 涉及的范围。
未来的版本很可能会使用 ALPN 等技术来扩展握手的可能性。
通过使用 URI 方案
ws://...
和 wss://...
,握手与 URI 解耦,允许未来发生变化时干扰更少。
他们使用它是为了架构清晰,看起来没有技术限制为什么你不能纯粹使用
http
来处理你的websocket连接。
请注意,用于处理 websocket 连接的 javascript 客户端库(如 Paho)纯粹通过 http 协议处理 websocket,如果您显式提供以
ws
协议为前缀的主机,甚至会失败 - 展示代码中的一个简单示例:
// Create a client instance client = new Paho.MQTT.Client( location.hostname, Number(location.port), "clientId" );