在WebSocket成功握手之后,我们可以使用gzip压缩吗?
以下是我的测试:
HTTP/1.1 101 Switching Protocols content-encoding: gzip Connection: Upgrade Server: AutobahnPython/?.?.? Upgrade:
WebSocket Sec-WebSocket-Accept: RIR8KmljoV8Cv9mdiLY7GM2nYMc=
答案 0 :(得分:9)
默认情况下,某些浏览器启用了WebSocket压缩(例如在Chrome中编写时,但在Firefox中没有)。客户端必须包含'Sec-WebSocket-Extensions:permessage-deflate'标题。如果服务器以相同的扩展名响应,则WebSocket通信将以帧为基础进行压缩。据我所知,没有浏览器API来启用/禁用扩展。
关于该主题的一篇好文章是:https://www.igvita.com/2013/11/27/configuring-and-optimizing-websocket-compression/
答案 1 :(得分:4)
IETF Websocket(compression extension)工作组有worked on为HyBi。我建议关注他们的邮件列表以获取最新信息。我还建议您查看this question。
2017年更新:该扩展程序现已推出一段时间,请参阅此处:https://tools.ietf.org/html/rfc7692
答案 2 :(得分:0)
是的,它可以。 Chrome 19+ supports it.
"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()
更多信息:how PerMessageDeflateOffer is used in Autobahn examples。