我试图了解WebSocket是如何工作的&;它们依赖于代理服务器

我试图了解WebSocket是如何工作的&;它们依赖于代理服务器,websocket,Websocket,我遇到了这个问题,然后才解决了这个问题 据我所知,加密/非加密websocket连接都依赖于代理服务器通过适当的头发送 来自关于未加密websocket连接的文章 如果未加密的WebSocket流量在流向WebSocket服务器的过程中通过一个透明代理,那么实际上连接可能会失败,因为在这种情况下浏览器不会>发出CONNECT方法。当代理服务器将请求转发到>(WebSocket)服务器时,它将删除某些头,包括Connection>头。因此,一个性能良好的透明代理服务器几乎会立即导致WebSocke

我遇到了这个问题,然后才解决了这个问题

据我所知,加密/非加密websocket连接都依赖于代理服务器通过适当的头发送

来自关于未加密websocket连接的文章

如果未加密的WebSocket流量在流向WebSocket服务器的过程中通过一个透明代理,那么实际上连接可能会失败,因为在这种情况下浏览器不会>发出CONNECT方法。当代理服务器将请求转发到>(WebSocket)服务器时,它将删除某些头,包括Connection>头。因此,一个性能良好的透明代理服务器几乎会立即导致WebSocket>升级>握手失败。 并非所有代理服务器都符合有关预期代理行为的HTTP标准。例如,某些代理服务器配置为不删除Connection:Upgrade标头并将其传递给WebSocket服务器,而WebSocket服务器则发送101 Web Socket协议握手响应。当客户端或服务器开始发送第一个WebSocket帧时,就会出现问题。由于框架与代理服务器可能期望的内容(如常规HTTP流量)不相似,因此可能会发生一些异常,除非代理服务器专门配置为处理WebSocket流量

关于加密的web套接字连接

对于透明代理服务器,浏览器不知道代理服务器,因此不发送HTTP CONNECT方法。但是,由于有线通信是加密的,中间透明代理服务器可能只允许加密的通信通过,因此如果使用Web套接字安全,则WebSocket连接成功的可能性要大得多

如果未加密的连接预期会失败&加密的连接只有更好的成功机会,那么它是如何工作的


我很可能把整个事情搞错了,但我很想知道这是怎么回事。

在加密连接中,代理看不到HTTP内容,所以他们只是简单地传递消息。但在非加密连接中,代理可能会检查和更改HTTP消息(例如,标头)(在某些情况下),因此在某些情况下,代理需要支持WebSocket,因为WebSocket消息看起来不像HTTP消息(例如,没有HTTP标头)。

在加密连接中,代理看不到HTTP内容,所以它们只是传递消息。但在非加密连接中,代理可能会检查和更改HTTP消息(例如,标头),因此在某些情况下,代理需要支持WebSocket,因为WebSocket消息看起来不像HTTP消息(例如,没有HTTP标头).

值得注意的是,您提到的这篇文章是由一位为一家公司工作的人撰写的,该公司生产的产品旨在解决这些问题。因此,作者可能有动机夸大问题的严重程度

例如,作者说:

[a transparent proxy]预期会剥离某些头,包括连接头

事实并非如此。根据RFC2616:

“透明代理”是指不修改请求或请求的代理 响应超出了代理身份验证和 鉴定

当然,许多代理并不完全遵循RFC,因此使用加密连接仍然是一个好主意


TLS加密是专门为防止中间服务器干扰您的流量而设计的。如果中间代理服务器导致安全WebSockets连接出现问题,那么您可能会遇到更大的问题,因为它还可能干扰其他安全通信,比如你和网上银行之间的联系。

值得注意的是,你提到的这篇文章是由一家公司的人写的,该公司生产的产品旨在解决这些问题。因此,作者可能有动机夸大问题的严重程度

例如,作者说:

[a transparent proxy]预期会剥离某些头,包括连接头

事实并非如此。根据RFC2616:

“透明代理”是指不修改请求或请求的代理 响应超出了代理身份验证和 鉴定

当然,许多代理并不完全遵循RFC,因此使用加密连接仍然是一个好主意

TLS加密是专门为防止中间服务器干扰您的流量而设计的。如果中间代理服务器导致安全WebSockets连接出现问题,那么您可能会遇到更大的问题,因为它还可能干扰其他安全通信,例如您与internet银行之间的连接