Proxyman v26.0.0 でついに HTTP/2 に対応

Proxyman v26.0.0 でついに HTTP/2 に対応 のカバー画像

5 分で読めます

HTTP/2 にようやく対応しました。macOS 版 Proxyman v26.0.0 の通常リリースに HTTP/2 のサポートが含まれます。もう別途ベータ版のアプリを用意する必要はありません。

アプリが HTTP/2 を使っている場合、その通信を Proxyman で確認できるようになりました。リクエストとレスポンスを読み、使われているプロトコルをチェックできます。普段お使いのフィルタやデバッグツールも、そのまま使えます。

このリリースでは、PRO ユーザー向けに Split View と、Safari 風の新しい Tab View も追加されました。どちらも、大量にキャプチャした通信のさまざまな部分を並べて表示しやすくします。

HTTP/2 が重要な理由

アプリは 1 つの画面を開くときに、複数のリクエストを送ることがよくあります。プロフィールを読み込み、リストを取得し、画像をダウンロードするといった処理が同時に行われることもあります。これらのリクエストが接続をどのように共有するかは、デバッグ中に見える内容に影響することがあります。

HTTP/2 では、HTTP メッセージの転送方法が変わります:

  • 1 つの接続で、複数のリクエストを同時に送受信できます。各やり取りは、それぞれ独自のストリームを使います。
  • ヘッダー圧縮により、同じ接続で送られる重複したヘッダーデータを減らせます。
  • 接続を再利用することで、新たに TCP 接続を開いたり、TLS のセットアップを繰り返したりする必要が減ります。
  • メソッド、URL、ステータスコード、ボディの意味は、これまでと変わりません。

これらの変更の詳細は HTTP/2 標準 に記載されています。オーバーヘッドを減らせる一方で、すべてのリクエストが速くなるわけではありません。サーバーの処理、ネットワークの状態、アプリ自体も依然として影響します。また、HTTP/2 も TCP 上で動作するため、パケットロスが同じ接続を共有するリクエストに影響することがあります。

デバッグという観点では、そのメリットは実用的です。HTTP/1.1 のキャプチャだけに頼らず、HTTP/2 を使う通信を直接確認できます。プロトコルのネゴシエーションや、複数のリクエストが同時に動くことが原因の問題を調べるときに役立ちます。

Settings で HTTP/2 を有効にする

HTTP/2 はデフォルトでオフになっています。有効にする手順は次のとおりです:

  1. Mac に Proxyman v26.0.0 以降をインストールします。
  2. Proxyman → Settings → General を開きます。
  3. Proxy セクションで Use HTTP/2 をオンにします。
  4. HTTPS を確認する場合は、クライアントデバイスに Proxyman の証明書をインストールし、信頼します。
  5. 確認したいアプリまたはドメインで SSL Proxying を有効にします。
  6. アプリから新しいリクエストを送信するか、ページを再読み込みします。
Proxyman の Settings にある General で Use HTTP/2 を有効にする
Proxyman の Settings にある General で Use HTTP/2 を有効にする

HTTP/2 のキャプチャを開始する

このデモでは、HTTP/2 を有効にして、Proxyman で新しいリクエストのキャプチャを開始する方法を紹介します。

HTTP/2 の設定を変更すると、既存の接続は閉じられ、新しい接続で新しい設定が使われます。動作中の WebSocket や Server-Sent Events の接続も、再接続が必要になる場合があります。

すでに Proxyman で HTTPS をキャプチャしている場合は、証明書とドメインの設定をそのまま使えます。初めてキャプチャする場合は、SSL Proxying ガイド に従ってください。リモートデバイスの通信も、Mac 上の Proxyman を経由するようにルーティングする必要があります。

確認できる内容

キャプチャしたリクエストを選択すると、そのやり取りで取得できる詳細を確認できます:

  • リクエストのメソッド、URL、クエリパラメータ、ヘッダー
  • Cookie とリクエストボディ(JSON、フォームデータ、バイナリコンテンツなど)
  • レスポンスのステータス、ヘッダー、ボディ
  • クライアントまたはサーバーがボディの後に送信した場合のトレーラーヘッダー
  • リクエストのタイミングと、記録された HTTP プロトコルの情報
  • 接続の詳細(取得できる場合は、サーバーがネゴシエーションしたプロトコルなど)

HTTP/2 の同じ接続を共有するリクエストは、リクエスト一覧で別々のやり取りとして表示されます。それぞれを選択すれば、下位のバイナリフレームを読まなくても内容を確認できます。

トレーラーは、レスポンスボディの後に最終的な情報を送る API で役立ちます。たとえば gRPC のレスポンスは、トレーラーに grpc-status と grpc-message を含めることがあります。HTTP 200 のレスポンスだけでは、その RPC が成功したかどうかはわかりません。ただし、この情報をキャプチャできても、バイナリボディがすべて自動的に読めるテキストになるわけではありません。

リクエストが実際に使ったプロトコルを確認する

HTTP/2 をオンにすると、Proxyman が HTTP/2 を使えるようになります。ただし、すべての接続に HTTP/2 を強制するわけではありません。

考慮すべき接続は 2 つあります:

  • アプリまたはブラウザが Proxyman に接続します。
  • Proxyman が上流のサーバーに接続します。

これら 2 つの接続では、異なる HTTP バージョンが使われることがあります。クライアントは HTTP/2 に対応し、ネゴシエーションに応じる必要があります。その接続で HTTP/2 を使うには、上流のサーバーも対応している必要があります。Proxyman は HTTP/1.1 へのフォールバックを許可しています。

新しいリクエストを送信したら、次の点を確認してください:

  • リクエストの詳細で、HTTP バージョンを確認します。
  • Request パネルの Connection Log を開き、記録されている場合は上流のプロトコルを確認します。
  • サーバーが受け入れたプロトコルを確認します。h2 は HTTP/2 を意味します。
  • ネゴシエーションで h2 を提示しても、サーバーがそれを選択したとは限らない点に注意してください。

この例では、Proxyman は h2 と http/1.1 を提示し、サーバーは h2 を受け入れています。

HTTP/2 の Connection Log。Proxyman でサーバーが h2 を受け入れたことを示している
HTTP/2 の Connection Log。Proxyman でサーバーが h2 を受け入れたことを示している

保存済みの古いキャプチャには、上流のプロトコルの詳細が含まれていない場合があります。情報がないからといって、接続が HTTP/1.1 を使ったとは限りません。記録された手順の読み方は、Connection Log ガイド で説明しています。

Split View とタブで通信を比較する

アプリでプロフィールは正しく読み込まれるのに、アクティビティの一覧だけが読み込めないとします。問題を再現する間は、両方のエンドポイントを表示したままにしてください:

  1. サイドバーでアプリまたはドメインを右クリックし、Open as Split View を選択します。
  2. 1 つ目のペインを、プロフィールのエンドポイントでフィルタします。
  3. 2 つ目のペインを、アクティビティのエンドポイントでフィルタします。
  4. 各ペインでリクエストを選択し、ステータス、ヘッダー、ボディを比較します。

各ペインは、独自のフィルタと選択状態を保持します。どちらも同じキャプチャを使うため、新しいリクエストはどちらのビューからでも確認できます。

別の調査をする場合は、Open as New Tab を選ぶか、⌘T を押します。フィルタを設定し直さずにタブを切り替えられ、タブをドラッグして好きな順番に並べ替えることもできます。Split View と Tab View には Proxyman PRO が必要です。

それでも HTTP/1.1 と表示される場合

  • Use HTTP/2 が有効になっているか確認し、新しいリクエストを送信します。
  • クライアントとサーバーが HTTP/2 に対応しているか確認します。フォールバックは正常な動作の場合もあります。
  • HTTPS の内容が暗号化されたままの場合は、証明書の信頼設定と SSL Proxying を確認します。
  • アプリまたはデバイスの通信が Proxyman を経由しているか確認します。
  • アプリが接続を拒否する場合は、SSL ピンニングを含む証明書の要件を確認します。

続けて読む

リリース版をダウンロードし、HTTP/2 を有効にして、確認したいリクエストをキャプチャしてください。

Noah Tran
Noah Tran

HTTP/2 通信のキャプチャを始める

macOS 版 Proxyman をダウンロードし、Settings で Use HTTP/2 をオンにして、新しいリクエストを確認しましょう。

macOS 版 Proxyman をダウンロード