2017-07-11 8 views
0

一番下の行:permessage-deflateレスポンスヘッダーを追加した後にwebsocketフレームが自動的に圧縮されますか?

は私がpermessage-収縮ヘッダは、要求と応答の両方に存在していても、圧縮されたメッセージをWebSocketを表示されません。

いくつかの詳細:

私はnodejsサーバーを持っている、と私は(engine.io下で)プライマスを使用しています。 permessage-delateをサポートするために、私はPrimusの 'compression'機能を使用します。

私はそれをオンにした後、私は応答の上にpermessage - deflateヘッダーを見始めます。

しかし、websocketフレーム自体は圧縮されていません。

私はcharlesproxyを使用してトラフィックをスニッフィングし、再度、フレームは「圧縮」機能をオンにする前と同じように見えます。

イラスト:

はここでのWebSocketハンドシェイクの例要求です:

Accept-Encoding:gzip, deflate, br 
Accept-Language:en-US,en;q=0.8,he;q=0.6,fr;q=0.4 
Cache-Control:no-cache 
Connection:Upgrade 
Cookie:[some cookies] 
Host:[our host] 
Origin:https://[our host] 
Pragma:no-cache 
Sec-WebSocket-Extensions:permessage-deflate; client_max_window_bits 
Sec-WebSocket-Key:6nMxnGd0E8GrDg2s1B4tHQ== 
Sec-WebSocket-Version:13 
Upgrade:websocket 
User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36 

そして、これは、対応する応答である:

Connection:upgrade 
Date:Tue, 11 Jul 2017 14:10:18 GMT 
Sec-WebSocket-Accept:lLjOXWbLRVIHw2inxrhx0U1ryrM= 
Sec-WebSocket-Extensions:permessage-deflate; client_no_context_takeover 
Sec-WebSocket-Version:13 
Server:nginx 
Upgrade:websocket 
WebSocket-Server:uWebSockets 

これらの例は、クロムDEVから取られツールネットワークのインスペクタ。 私はcharlesproxyスニファで何か似たようなものを見ます。

その他の参照:

私はこれを見た:

Implementing permessage-deflate in WebSockets

をしかし、私はかなりそこに有効な答えを見つけることができませんでした。

そう...

私はここで何をしないのですか? さらに何かを実装する必要はありますか? ライブラリを追加する必要がありますか?

バージョン:

  • ノード - 4.2.4
  • プリムス - 7.0.2
  • クロム:59.0.3071.115
  • FF:54.0.1
  • チャールズ:4.1。 4

多くの感謝!

答えて

0

私はそれを理解したと思います。

charlesproxyスニッファ - 私は圧縮データのビューを見る場所を知っていました(知りたい人に - 私はwebSocketフレームを分解するwssのビューを見ました。 websocketハンドシェイクを表すhttp/httpsエントリにあり、「圧縮された」タブがあります)。

Chromeデベロッパーツールのネットワークスニッファは、圧縮後のデータを単純に表示するので、人間が読むことができます。

私自身の質問に答えるために、データを圧縮するためにさらに何かを実装する必要はないと思います。

1

uwsは、指示があってもデータを圧縮しないという問題があります。

あなたはws代わりのuwsを使用するengine.ioを伝える場合、それが動作するはずhttps://github.com/socketio/engine.io/issues/474

この問題を参照してください。これは、wsEIO_WS_ENGINEのenv変数を設定するか、engine.ioというwsEngineオプションを使用して設定できます。

メッセージが圧縮されないサイズのしきい値もあると思います。私が間違っていなければ、それは1キロバイトです。

関連する問題