【问题标题】:Can two different browsers on the same machine connect to a server both using websocket?同一台机器上的两个不同浏览器可以都使用 websocket 连接到服务器吗?
【发布时间】:2012-11-10 01:19:29
【问题描述】:

我在同一台机器上有两个不同的浏览器(Chrome 和 Safari)(即相同的 IP),想知道是否可以使用 websocket 将它们连接到同一台服务器?

我试过了。 Chrome 连接正常,但 Safari 报错,报错:

Error during WebSocket handshake: location mismatch: 
wss://www.mysite.com/sockjs/310/s1a5r_6q/websocket != ws://www.mysite.com/sockjs/310/s1a5r_6q/websocket
sockjs-0.3.js:282Closed transport: websocket SimpleEvent(type=close, code=1006, reason=WebSocket connection broken, wasClean=false)

但我不确定这是否是由于每个 IP 地址一个 websocket 连接的某些限制?

【问题讨论】:

    标签: html websocket sockjs


    【解决方案1】:

    MLister,您似乎遇到了 sockjs 部署问题。确保 sockjs 服务器在通过 https 的 websocket 握手期间返回 wss://。这是一些 sockjs 服务器的一个众所周知的问题 - 服务器并不总是知道页面是通过 https 提供的,并在握手期间返回 ws://。

    例如 sockjs-node 使用 faye-websocket-node 处理这种情况的代码在这里: https://github.com/faye/faye-websocket-node/blob/master/lib/faye/websocket.js#L40 https://github.com/faye/faye-websocket-node/blob/master/lib/faye/websocket.js#L25-L32

    基本上,您必须确保负载均衡器设置“x-forwarded-proto”标头。

    有意义吗?

    【讨论】:

    • 虽然我了解x-forwarded-proto 部分,但return (request.connection && request.connection.authorized !== undefined) || (request.socket && request.socket.secure); 背后的逻辑是什么,当x-forwarded-proto 标头未设置时?
    • x-forwarded-proto 标头未设置时,faye 最好检测连接是否通过 SSL - 但它只能猜测。此外,只有当您的 SSL 终止是由 node.js 内部完成(而不是 haproxy、stunnel 等)时,它才能检测到它
    【解决方案2】:

    wss://www.mysite.com/sockjs/310/s1a5r_6q/websocket != ws://www.mysite.com/sockjs/310/ s1a5r_6q/websocket

    这表明 websocket 连接通过了一个不理解 websocket 连接的代理。最有可能的是,它是服务器端的反向代理,从代理后面的服务器卸载 SSL 开销。代理向客户端提供了安全连接,但报告了从服务器到客户端的连接不安全。这是不正确的。

    【讨论】:

      【解决方案3】:

      就 WebSocket 协议而言,没有技术限制,尽管规范中有规定限制每个 IP 地址的未完成连接尝试以防止垃圾邮件。只有两个我怀疑你遇到了这个问题。不过,您的 websocket 服务器可能还有其他政策可能会进一步限制这一点。

      【讨论】:

        【解决方案4】:

        当然可以,至少在浏览器支持 WebSocket API 的情况下。 您甚至不需要 2 种不同的浏览器,您只需在多个选项卡中打开您的网站,例如在 chrome 中,它应该可以正常工作。

        【讨论】:

          猜你喜欢
          • 2014-07-20
          • 1970-01-01
          • 2014-10-06
          • 1970-01-01
          • 2021-01-13
          • 1970-01-01
          • 2015-12-07
          • 2011-01-10
          • 2023-03-21
          相关资源
          最近更新 更多