gpt4 book ai didi

javascript - 在 WebSocket 中实现 permessage-deflate

转载 作者:行者123 更新时间:2023-11-28 00:17:12 25 4
gpt4 key购买 nike

我在理解和实现 WebSocket 中的 permessage-deflate 扩展时遇到问题。

到目前为止,我已经在握手代码中添加了“Sec-WebSocket-Extensions: permessage-deflate”。看起来一切正常。

但是,当我从服务器 (Node.js) 向客户端 (JS) 发送“TEST”消息时,浏览器(Chrome 和 Firefox)似乎并未解压缩数据本身。

如何使用permessage-deflate扩展正确实现数据压缩和解压?

请求 header :

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

响应 header :

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 header 在握手中用于指示连接是否应使用压缩。

  1. 当客户端发送 Websocket 请求时,如果客户端浏览器支持,则会在 Websocket 扩展 header 中发送 permessage-deflate。服务器根据此 header 了解客户端是否支持压缩。
  2. 如果服务器决定使用压缩,它会使用类似于 ACK 消息的相同 header 进行响应。客户端收到响应后根据服务器的响应决定是否压缩数据。

一旦服务器和客户端都决定使用压缩,它们就必须分别使用 deflate 压缩技术来压缩消息。即,在创建 websocket 服务器时,您必须使用 "perMessageDeflate" 选项在服务器上启用压缩。 ws节点模块默认启用此功能。 ws 模块负责处理 header 标志,因此您无需隐式设置它。

Note: Deflate uses a combination of LZ77 and Huffman coding to compress data.The client_max_window_bits; server_max_window_bits=10 header flags are used to set a custom buffer/'sliding window' used by the LZ77 algorithm to decrease memory overhead.

关于javascript - 在 WebSocket 中实现 permessage-deflate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30348348/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com