【问题标题】:HTML5 websockets and proxy configsHTML5 websockets 和代理配置
【发布时间】:2014-10-09 00:04:35
【问题描述】:

我正在使用 Debian 7 和浏览器 Google Chrome (35)。 当我试图通过websockets.org 的回声测试时 控制台出现错误:

WebSocket connection to 'ws://echo.websocket.org/?encoding=text' failed: Failed to send WebSocket frame. 

我的电脑在 Squid 3 的代理后面,但同一代理后面的其他用户可以通过 websockets.org 上的回显测试(每个用户的 squid 配置相同)。

如何调试此问题?

我已关闭所有反向代理服务器(nginx、apache)

如果我在 Google chrome 控制台中编写以下代码:

socket = new WebSocket("ws://echo.websocket.org/");

然后我在网络页面(谷歌浏览器开发工具)中看不到任何帧(没有握手阶段)。

更新:

有趣的是,我在最新版本的 Iceweasel 浏览器 (Firefox) 上可以使用 websockets 连接,但它不适用于 Google Chrome 或 Chromium。

我正在使用以下命令启动 Google Chrome:

/usr/bin/google-chrome-stable %U --proxy-server="http://172.16.20.12:4554"

还有什么可以做的? 非常感谢。

【问题讨论】:

    标签: javascript html google-chrome proxy websocket


    【解决方案1】:

    握手不是帧,只是普通的 HTTP。如果你发起了一个 Websocket 连接,并且服务器返回一个 HTTP 101 Switching Protocols 响应,那就是握手。

    您是否尝试过使用 WSS:// 而不是 WS://?

    【讨论】:

    • 感谢您的回复。是的,跟wss情况一样。有趣的是,websockets 连接适用于我最新版本的 Iceweasel 浏览器 (Firefox),但它不适用于 Google Chrome 或 Chromium
    • 这很奇怪,因为那个服务器没有实现任何扩展,所以应该是一样的。如果您找到解决方案,请发布,这很有趣:)
    • 我遇到了同样的问题。我相当确定这是 Chrome 中的一个错误。不过,您应该检查的一件事是,在您的代理设置中选中“将此代理用于所有协议”复选框。这会将您的 HTTP 代理注册为 SOCKS 代理,并且 websockets 将尝试使用它并失败。几个月前这是我的问题,但我修复了它并让 websocket 在 chrome 中工作了一段时间,但几周前它停止了工作。正如我所说,可能是 *NIX 上 Chrome 中的回归错误(这适用于 Windows)。
    猜你喜欢
    • 2015-02-16
    • 2012-03-25
    • 2013-05-04
    • 2018-08-06
    • 2015-04-10
    • 2013-04-21
    • 1970-01-01
    • 2015-02-10
    • 2012-03-06
    相关资源
    最近更新 更多