gpt4 book ai didi

javascript - Websocket 与 SockJS 对象

转载 作者:行者123 更新时间:2023-11-30 07:51:10 25 4
gpt4 key购买 nike

我想知道为什么你能够初始化一个普通的 javascript websocket:

 var socket = new WebSocket('ws://example.com/myprefix')

但是使用 SockJS 你需要调用一个普通的 http(s) url:

var sock = new SockJS('https://example.com/my_prefix');

为什么 SockJS 不允许“普通”ws url?

最佳答案

ws:开头的websocket协议(protocol)在RFC6455中定义。 .

虽然该协议(protocol)的 future 实现可能会获得用于安全和非安全流量的专用端口号,但目前(2018 年)该协议(protocol)是通过发出带有升级 header 的 HTTP 请求来启动的,以将协议(protocol)更改为 WS。 (引用 123)。

使用 websockets 和 ws 协议(protocol)需要客户端支持 websockets API协议(protocol)升级 header 和 websocket 通信的服务器支持。

SockJS就像 websockets 的 pollyfill,如果 websockets 不可用,它将回退到可用的通信 channel 。根据 readme.md 文件,

"SockJS is intended to work for all modern browsers and in environments which don't support the WebSocket protocol -- for example, behind restrictive corporate proxies.

websockets 和 SockJS 都需要服务器支持。例如。对于节点,wsSockJS for node . SockJS 的 readme.md 文件声明服务器将使用 ws: 协议(protocol) header 接受原始请求,但没有提及在哪个端口上。

如果客户端请求不接受 ws URL,我建议假设它是围绕发出初始 HTTP/HTTPS 请求以确定支持的假设编写的。也许更新请求可能会扩展 URL 中接受的协议(protocol)!

关于javascript - Websocket 与 SockJS 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52731686/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com