我试图了解websockets如何工作&在某种程度上它们依赖于代理服务器

时间:2012-07-03 19:54:15

标签: websocket

我偶然发现了stackoverflow question&然后通过那个问题到this article

根据我的理解,加密/未加密的websocket连接都依赖于通过正确的标头发送的代理服务器。

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

  

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

在加密的Web套接字连接上

  

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

如果未加密的连接预计会失败&加密连接只有更好的成功机会,它甚至如何工作?!!

我很可能把这件事弄错了,但很想知道这是如何运作的。

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

例如,作者说:

  

[透明代理]应该剥离某些标头,包括Connection标头

事实并非如此。根据RFC2616:

  

A"透明代理"是不修改请求的代理或   超出代理身份验证所需的响应   识别

当然,许多代理都不遵循RFC的要求,因此使用加密连接仍然是一个好主意。

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