我遇到了这个stackoverflow 问题,然后通过这个问题阅读了这篇文章。
据我了解,加密/非加密的 websocket 连接都依赖于通过正确的标头发送的代理服务器。
来自关于未加密的 websocket 连接的文章
如果未加密的 WebSocket 流量在到达 WebSocket 服务器的途中经过透明代理,则实际上连接很可能会失败,因为在这种情况下浏览器不会发出 CONNECT 方法。当代理服务器将请求转发到 >(WebSocket) 服务器时,预计会剥离某些标头,包括连接 >标头。因此,一个表现良好的透明代理服务器将导致 WebSocket >upgrade >handshake 几乎立即失败。并非所有代理服务器都符合有关预期代理行为的 HTTP 标准。例如,某些代理服务器配置为不删除 Connection: Upgrade 标头并将其传递给 WebSocket 服务器,WebSocket 服务器反过来发送 101 Web Socket Protocol Handshake 响应。当客户端或服务器开始发送第一个 WebSocket 帧时,就会出现问题。由于该帧与代理服务器可能期望的任何内容(例如常规 HTTP 流量)不同,因此可能会发生一些异常,除非代理服务器专门配置为处理 WebSocket 流量。
在加密的 Web 套接字连接上
在透明代理服务器的情况下,浏览器不知道代理服务器,因此不发送 HTTP CONNECT 方法。但是,由于有线流量是加密的,中间透明代理服务器可能会简单地允许加密流量通过,因此如果使用 Web Sockets Secure,WebSocket 连接成功的可能性会大得多。
如果预计未加密的连接会失败,而加密的连接只有更好的成功机会,它是如何工作的?!!
我很可能把整个事情弄错了,但我很想了解这是如何工作的。