代码之家  ›  专栏  ›  技术社区  ›  David542

Websocket与SockJS对象

  •  0
  • David542  · 技术社区  · 6 年前

    我想知道为什么您能够用以下命令初始化一个普通的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?

    1 回复  |  直到 6 年前
        1
  •  11
  •   traktor    6 年前

    websocket协议,从 ws: RFC6455 .

    虽然该协议的未来实现可能会获得用于安全和非安全通信的专用端口号,但目前(2018年),该协议是通过发出带有升级头的HTTP请求来启动的,以将协议更改为WS(参考文献 1 2 & 3 ).

    WebSocket和 ws websockets API 以及服务器端支持的协议升级头和websocket通信。

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

    SockJS适用于所有现代浏览器和不支持WebSocket协议的环境——例如,在限制性的公司代理之后。

    websockets和SockJS都需要服务器上的支持。例如,对于节点 ws SockJS for node 远景: 协议头,但没有提到哪个端口。

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