HTTP/2対応のPacketProxyを試してみた
HTTP/2がどんなものなのかよく知りませんでした。
機会があったので、HTTP/2について調べた上で、HTTP/2に対応したローカルプロキシツール「PacketProxy」を使ってみました。
目次
HTTP/2
そもそもHTTP/2ってどんなもの?
HTTP/1.1を改善した通信プロトコルです。Webアプリのコンテンツデータ量は年々増大し、データ量が増大したことで、通信の遅延が発生しているそうです。通信の遅延が損失につながる場合もあるので、より遅延の少ない通信が求められています。
また、スマートフォンで通信回線が細い環境での利用も増えています。通信回線が細い場合でも、より遅延を少なくしていく必要があります。
そのような状況の中で策定されたのがHTTP/2です。
HTTP/2の特徴的な機能
下記の様な機能があるようです。
- 多重接続ができる
- 通信内容を圧縮する
- 優先度制御
- サーバ側から予め必要なコンテンツをプッシュ送信する
- できるだけ不要な通信をしない
多重接続ができる
HTTP/1.1の場合、複数のTCP接続を使って通信しており、6セッション同時に使うのが一般的だそうです。 HTTP/2では、同時に100以上のリクエストが発行できます。
通信内容を圧縮する
通信のヘッダ圧縮して、通信量を減らします。
優先度制御
Webコンテンツの内容に応じて、優先度を指定してWebサーバに送信を依頼します。 ブラウザの描画に適した順番でWebサーバからコンテンツが配信されることで、描画までにかかる時間が短縮されます。
サーバ側から予め必要なコンテンツをプッシュ送信する
ブラウザが次にリクエストしてくるコンテンツを予測し、ブラウザからリクエストが来る前にサーバからブラウザへコンテンツを送信します。
できるだけ不要な通信をしない
Webブラウザのキャッシュ状況に合わせて、必要なコンテンツデータのみ配信します。既にキャッシュに保持しているコンテンツを送信しないことで不要な通信を減らします。
HTTP/2について、参照URL
www.slideshare.net
www.slideshare.net
https://www.slideshare.net/shigeki_ohtsu/html5-conf2013-http2iijohtsu
www.slideshare.net
PacketProxy
PacketProxyとは
HTTP/2だけでなく、WebSocket, FireBase, MQTT, gRPC, Protocol Buffers, MessagePack, CBORといったプロトコルに対応したローカルプロキシツールです。
対応しているプロトコルのパケットを確認したり、内容を改変して送信することができます。
インストール
こちらからインストールできます。Windows版と、Mac版のインストーラを準備してくれています。
Releases · DeNA/PacketProxy · GitHub
使ってみる
初期設定
wikiに記載されている内容で、PacketProxyのポート設定やブラウザのProxy設定を行います。
HTTPS通信の内容を扱う場合は、PacketProxyのCA証明書をパソコンの証明書ストアに登録し、”信頼できるもの”として設定しておく必要があります。
例えばmacOSの場合は、KeyChainにPackeProxyのCA証明書を追加し、「常に信頼」する設定にします。
使ってみる · DeNA/PacketProxy Wiki · GitHub
使ってみた感想
Burp SuiteとWiresharkの使い勝手を合わせたような印象でした。
Burp Suiteを同じく、ブラウザからのリクエストを一旦プロキシで止めて、送信されるデータを書き換えることができます。Wiresharkのように「request == google && type == image」のような書き方でパケットの一覧にフィルタをかけることもできます。
HTTP/2の通信内容を確認すると、下記のようにバイナリの状態からデコードして表示してくれるので、とても見やすいです。
特徴的な機能として、「SSL Pass Through」と「Private DNS Server」という機能があったのですが、痒いところに手が届く、とても良い機能だなと感じました。
DNSの書き換えについて、公式のwikiに記載されていた内容をそのまま抜粋させていただきます。
スマートフォンのアプリの通信をPacketProxyでみるとき、アプリがプロキシ設定を参照してプロキシ経由での通信をしてくれる場合は、PacketProxyが動作しているPCをプロキシとして設定すれば良いので簡単です。 しかし、プロキシ設定を無視して直接サーバと通信するアプリの場合は、通信をみられません。 その場合には、PacketProxyのDNS書き換え機能を利用することで、通信をみられるようになります。
また、「SSL Pass Through」では、決済系の通信など暗号化通信の証明証チェックが厳しい箇所で、PackeProxyの証明書を介さず通信させて、証明書エラーを回避することができます。
最後に
HTTP/2について調べ、HTTP/2に対応したPacketProxyを使ってみました。
PacketProxyは、WebSocket, FireBase, MQTT, gRPC, Protocol Buffers, MessagePack, CBORといったプロトコルに対応しているので、これらのプロトコルのパケットを確認する際に使ってみようと思いました。