26

WebSocket握手成功后,我们可以使用gzip压缩吗?

这是我的测试:

  1. 我使用高速公路库构建服务器,然后响应客户端:
    HTTP/1.1 101 Switching Protocols content-encoding: gzip Connection: Upgrade Server: AutobahnPython/?.?.? Upgrade: WebSocket Sec-WebSocket-Accept: RIR8KmljoV8Cv9mdiLY7GM2nYMc=
  2. 然后我的服务器使用 gzip 压缩
  3. chrome浏览器得到了结果,但它告诉我“无法将文本帧解码为UTF-8”
4

3 回答 3

11

WebSocket 压缩在某些浏览器中默认启用(在撰写本文时,例如在 Chrome 中,但在 Firefox 中未启用)。客户端必须为此包含“Sec-WebSocket-Extensions: permessage-deflate”标头。如果服务器使用相同的扩展名进行响应,则 WebSocket 通信会以帧为单位进行压缩。据我所知,没有用于启用/禁用扩展的浏览器 API。

关于该主题的一篇好文章是:https ://www.igvita.com/2013/11/27/configuring-and-optimizing-websocket-compression/

于 2014-11-15T21:02:54.313 回答
6

IETF Websocket ( HyBi ) 工作组正在开发一个压缩扩展。我建议关注他们的邮件列表以获取最新信息。我也建议查看这个问题


2017 年更新:该扩展现已推出一段时间,请参见此处:https ://www.rfc-editor.org/rfc/rfc7692

于 2012-07-25T09:53:38.387 回答
0

是的,它可以。Chrome 19+ 支持它。

"https://github.com/crossbario/autobahn-python/blob/master/examples/twisted/websocket/echo_compressed/server_advanced.py"

from twisted.internet import reactor
from twisted.web.server import Site
from twisted.web.static import File

from autobahn.twisted.websocket import WebSocketServerFactory, \
    listenWS

from autobahn.websocket.compress import *

def accept(offers):
    for offer in offers:
        return PerMessageDeflateOfferAccept(offer)

debug = True
factory = WebSocketServerFactory(u"ws://127.0.0.1:9000", debug=debug, debugCodePaths=debug)
factory.setProtocolOptions(perMessageCompressionAccept=accept)

listenWS(factory)

webdir = File(".")
web = Site(webdir)
reactor.listenTCP(8080, web)

reactor.run()

更多信息:如何在 Autobahn 示例中使用 PerMessageDeflateOffer

于 2016-01-21T13:58:47.597 回答