26

WebSocket のハンドシェイクが成功した後、gzip 圧縮を使用できますか?

ここに私のテストがあります:

  1. 私は autobahn lib を使用してサーバーを構築し、クライアントに次のように応答します。
    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()

詳細:アウトバーンの例での PerMessageDeflateOffer の使用方法

于 2016-01-21T13:58:47.597 に答える