Javascript 在WebSockets中实现permessagedeflate

Javascript 在WebSockets中实现permessagedeflate,javascript,websocket,compression,deflate,inflate,Javascript,Websocket,Compression,Deflate,Inflate,我在理解和实现WebSocket中的permessage deflate扩展时遇到了一个问题 到目前为止,我已经在握手代码中添加了“SecWebSocket扩展:permessage deflate”。看来一切正常 然而,当我从服务器(Node.js)向客户端(js)发送一条“TEST”消息时,似乎浏览器(Chrome和Firefox)本身并没有解压缩数据 如何使用permessagedeflate扩展正确地实现数据压缩和解压缩 请求标头: GET ws://localhost/ HTTP/1.

我在理解和实现WebSocket中的permessage deflate扩展时遇到了一个问题

到目前为止,我已经在握手代码中添加了“SecWebSocket扩展:permessage deflate”。看来一切正常

然而,当我从服务器(Node.js)向客户端(js)发送一条“TEST”消息时,似乎浏览器(Chrome和Firefox)本身并没有解压缩数据

如何使用permessagedeflate扩展正确地实现数据压缩和解压缩

请求标头:

GET ws://localhost/ HTTP/1.1
Host: localhost
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: null
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.152 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: nl-NL,nl;q=0.8,en-US;q=0.6,en;q=0.4
Sec-WebSocket-Key: X3RofjiYbzVR8zUPI5ZI6w==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Sec-WebSocket-Protocol: Exodus_101
响应标题:

HTTP/1.1 101 Web Socket Protocol Handshake
Upgrade: WebSocket
Connection: Upgrade
sec-websocket-accept: sFO1Id30BZe63QWcm894hnnb+Pg=
Sec-WebSocket-Protocol: Exodus_101
Sec-WebSocket-Extensions: permessage-deflate

服务器和客户端都压缩有效负载数据部分 使用参数按每条消息显示WebSocket数据消息 在开场握手时进行了协商

permessage deflate头在握手中用于指示连接是否应使用压缩

  • 当客户端发送websocket请求时,如果客户端浏览器支持,它会在websocket extensions标头中发送permessage deflate。服务器知道客户端是否支持基于此头的压缩
  • 如果服务器决定使用压缩,它将使用与ACK消息类似的相同报头进行响应。客户端在收到响应后根据服务器的响应决定是否压缩数据
  • 一旦服务器和客户端都决定使用压缩,它们就必须使用deflate压缩技术分别压缩消息。 i、 e在创建websocket服务器时,必须使用“perMessageDeflate”选项在服务器上启用压缩。默认情况下,节点模块启用此功能。ws-module负责头标志,因此您不需要隐式设置它

    注意:Deflate使用LZ77和哈夫曼编码的组合来压缩 数据。客户端的最大窗口位server\u max\u window\u bits=10头标志用于设置自定义缓冲区/LZ77算法使用的“滑动窗口”,以减少内存开销


    复制并粘贴握手negotiation@vtortola你好我刚刚编辑了上面的帖子。我已经包括了标题。握手似乎还可以,你是如何压缩和解压缩的?我不是,我认为整个压缩和解压缩功能将自动发生时,添加permessage deflate在标题中。我的问题是理解如何实现压缩和解压缩。。实际上,您必须在node.js中启用某些功能,或者为此添加一个扩展,而不仅仅是返回一个头。