在某些稍低一些版本的 Chrome 上与 Workerman 进行 WebSocket 握手失败,比如 Windows 版的 Chrome 41,原因是该版本的浏览器在 WebSocket 握手时默认会传一个 Sec-WebSocket-Protocol 头:
Sec-WebSocket-Protocol: undefined
然后就发生了这种错误:
WebSocket connection to 'ws://127.0.0.1:8100/' failed: Error during WebSocket handshake: Sent non-empty 'Sec-WebSocket-Protocol' header but no response was received
建立连接的方法很简单,并没有传第二个参数:
var ws = new WebSocket("ws://127.0.0.1:8100");
难道这是浏览器的 BUG?我在高版本的 Chrome 上即使故意传一个 undefined 的变量给第二个参数,也不会发送 Sec-WebSocket-Protocol 头,而我说的版本中,即使我第二个参数传 null 也会有这个头。
请问除了升级浏览器外有没有什么办法解决这个?
额,没事了,不关浏览器的事,是 Adguard 这个插件搞的鬼。。
奇怪了,这个插件在 Mac 上的 Chrome 里就没这个问题。