Chrome と macOS アプリの HTTP/3 通信をキャプチャする方法

Chrome と macOS アプリの HTTP/3 通信をキャプチャする方法 のカバー画像

5 分で読めます

1. 問題:HTTP/3 のリクエストが表示されない

Google Chrome では Web サイトが読み込めている、あるいは macOS アプリがレスポンスを受け取っているのに、Proxyman にそのリクエストが表示されないことがあります。考えられる原因の一つが HTTP/3 です。HTTP/3 は、通常の HTTP プロキシが扱う TCP 接続ではなく、UDP 上の QUIC を使用します。

  • 一部のリクエストは表示されるのに、別のリクエストはキャプチャをすり抜ける。
  • Proxyman の証明書をインストールするだけでは、QUIC の通信はプロキシ経由になりません。
  • Mac アプリは、システムのプロキシ設定を無視することもあります。

解決策: Proxyman で Network Extension と Use HTTP/2 を有効にします。対応している接続では、この拡張機能により HTTP/3 が TCP にフォールバックし、Proxyman が HTTP/2 でリクエストをキャプチャできるようになります。

期待される結果

  • Chrome や Mac アプリからの新しいリクエストが Proxyman に表示される。
  • 証明書を信頼する設定と SSL Proxying を行うと、HTTPS のヘッダーとボディを読めるようになる。
  • ネゴシエーションが成立した場合、キャプチャされたプロトコルとして HTTP/2 が表示されます。下の例では、上流サーバーが h2 を受け入れています。
Proxyman での HTTP/2 キャプチャの例:Connection Log にサーバーが h2 を受け入れたことが表示されている
Proxyman での HTTP/2 キャプチャの例:Connection Log にサーバーが h2 を受け入れたことが表示されている

この手順は、HTTP/3 が HTTP/2 にフォールバックした後のリクエストをキャプチャします。ネイティブの QUIC 通信はデコードしません。HTTP/2 が利用できない場合は、HTTP/1.1 へのフォールバックも起こり得ます。

2. HTTP/3 フォールバックの仕組み

HTTP/3 は、リクエストがネットワーク上を伝わる方法を変えます。ただし、URL、ヘッダー、レスポンスボディといった、おなじみの HTTP データを運ぶ点は変わりません。HTTP/3 の標準仕様 では、QUIC による接続に失敗した場合、TCP ベースの HTTP にフォールバックすることが説明されています。

キャプチャ中に起きることは次のとおりです:

  1. Chrome またはアプリが、UDP ポート 443 上の QUIC で接続を試みます。
  2. Proxyman の Network Extension は、処理対象の通信について、その接続を拒否します。
  3. フォールバックに対応しているクライアントは、代わりに TCP 接続を開きます。
  4. Use HTTP/2 を有効にしていれば、Proxyman は HTTP/2 をネゴシエーションし、そのやり取りを表示できます。

これにより、API のデータ、ログインリクエスト、サーバーエラーをデバッグできます。トランスポートが変わるため、HTTP/3 のタイミングや QUIC 固有の不具合を調べる場合は、ネイティブの QUIC キャプチャツールを使ってください。

3. 始める前に

  • macOS 26 以降を使用してください。
  • Proxyman for macOS の最新の直接配布版をインストールしてください。
  • Network Extension を使うには Proxyman PRO が必要です。この拡張機能は現在ベータ版で、デフォルトではオフになっており、Setapp では利用できません。
  • TCP フォールバックに対応している Web サイトやアプリを使用してください。HTTP/3 のみに対応しているクライアントでは、この方法は使えません。

このガイドでは、Mac で動作しているアプリを対象としています。iPhone や Android デバイスには、それぞれ個別のキャプチャ設定が必要です。

4. Network Extension をインストールして有効にする

  1. Proxyman → Settings → Network Extension を開きます。
  2. Enable Network Extension をオンにします。
  3. 表示された場合は、Install and Enable をクリックします。
Chrome と macOS アプリの通信をキャプチャするため、Proxyman の設定で Network Extension を有効にする
Chrome と macOS アプリの通信をキャプチャするため、Proxyman の設定で Network Extension を有効にする
  1. System Settings → General → Login Items & Extensions を開きます。
  2. Extensions で、By Category → Network Extensions を選択します。
macOS の システム設定で、Login Items & Extensions から Network Extensions を探す
macOS の システム設定で、Login Items & Extensions から Network Extensions を探す
  1. Proxyman を有効にし、macOS がネットワーク構成の追加を求めたら Allow をクリックします。
macOS の システム設定で Proxyman の Network Extension を許可する
macOS の システム設定で Proxyman の Network Extension を許可する
  1. Proxyman に戻り、ローカルアプリケーションの HTTP と HTTPS をキャプチャしているというメッセージが表示されるまで待ちます。

インストールの詳しい手順は、Network Extension ガイド を参照してください。キャプチャ中は Proxyman を開いたままにしてください。

5. Proxyman で HTTP/2 を有効にする

  • Proxyman → Settings → General を開きます。
  • Proxy セクションで、Use HTTP/2 をオンにします。
  • 設定を変更したら、新しいリクエストを送信してください。既存の接続は閉じられます。
HTTP/3 フォールバックのキャプチャのため、Proxyman の General 設定で Use HTTP/2 をオンにする
HTTP/3 フォールバックのキャプチャのため、Proxyman の General 設定で Use HTTP/2 をオンにする

HTTP/2 のサポートは Proxyman v26.0.0 から利用でき、デフォルトではオフになっています。プロトコルのネゴシエーションとフォールバックについては、HTTP/2 ガイド で解説しています。

HTTPS の検査を設定する

  1. Certificate → Install a Certificate on this Mac… を開きます。
  2. Automatic Mode を使用し、インストールを承認して、Installed & Trusted と表示されていることを確認します。
  3. 検査したいアプリまたはドメインで SSL Proxying を有効にします。サイドバーで右クリックして有効にすることもできます。
  4. Proxyman が復号された内容をキャプチャできるよう、リクエストを再実行します。

まだ証明書の信頼設定が済んでいない場合は、macOS の証明書ガイド を参照してください。Network Extension は接続を振り分け、証明書の信頼によって Proxyman が HTTPS のコンテンツを読めるようになります。

6. Google Chrome や macOS アプリの通信をキャプチャする

Google Chrome

  • ⌘Q で Chrome を完全に終了してから、再度開いて新しい接続を作成します。
  • デバッグしたい Web サイトを開き、リクエストを送信する操作を繰り返します。
  • Proxyman のサイドバーで Chrome または対象のドメインを選択します。
  • リクエストを選択すると、ヘッダー、クエリパラメータ、ボディ、レスポンスを確認できます。
  • 再読み込みしても新しいリクエストが送られない場合は、Chrome DevTools を開き、Network → Disable cache を選択して、DevTools を開いたまま再読み込みしてください。

macOS アプリ

  • Network Extension を有効にした後、アプリを終了して再度開いてください。
  • リストの更新やプロフィールの読み込みなど、ネットワーク操作を発生させます。
  • Proxyman でアプリまたはその API ドメインを選択します。
  • レスポンスのステータスとボディを確認して、サーバーの返答を把握します。

アプリは引き続き Proxyman の証明書を信頼している必要があります。証明書ピンニングや別の信頼ストアがあると、フォールバックが機能していても HTTPS の検査ができない場合があります。

7. キャプチャした HTTP バージョンを確認する

  • アプリから Proxyman への接続について、リクエストの HTTP バージョンを確認します。
  • Proxyman からサーバーへの接続については、Request パネルの Connection Log を開きます。
  • 上流の HTTP/2 を確認するには、ALPN: server accepted h2 を探します。
  • 受け入れられたプロトコルを確認してください。h2 を含む提案があるだけでは、確認にはなりません。

2 つの接続では異なる HTTP バージョンが使われることがあります。結果の読み方については、Connection Log ガイド を参照してください。

8. リクエストが表示されない場合のトラブルシューティング

  • 何も表示されない: Network Extension が有効になっていること、Recording がオンになっていること、フィルタでリクエストが隠れていないことを確認してください。対象のアプリを再起動してください。
  • HTTPS の内容が暗号化されたまま: 証明書の信頼を確認し、Web サイトのドメインとは異なる場合がある実際の API ドメインで SSL Proxying を有効にしてください。
  • キャプチャが HTTP/1.1 になっている: Use HTTP/2 を確認して、再試行してください。クライアントとサーバーは、それぞれの接続で HTTP/2 に対応している必要があります。
  • アプリが接続に失敗する: 証明書のエラーを確認し、TCP フォールバックなしで HTTP/3 を必須としていないかを確認してください。
  • 独自の QUIC サービスが表示されない: このフォールバックが扱うのは UDP ポート 443 です。それ以外のポートの QUIC は、この手順の対象外です。

作業が終わったら、Proxyman の設定で Enable Network Extension をオフにして、拡張機能によるキャプチャを停止してください。

関連記事

Noah Tran
Noah Tran

表示されないリクエストを Mac からキャプチャ

Proxyman for macOS をダウンロードし、Network Extension と HTTP/2 を有効にして、次のリクエストを確認しましょう。

Proxyman for macOS をダウンロード