メインコンテンツまでスキップ

HTTP/2

macOS 版 Proxyman で HTTP/2 を有効にして HTTP/2 通信をキャプチャし、リクエスト、レスポンス、トレーラー、ネゴシエートされたプロトコルを確認できます。

1. どんな機能?​

HTTP/2 では、複数のリクエストが 1 本の接続を同時に共有できます。Proxyman は各リクエストとレスポンスを個別のやり取りとしてキャプチャするため、通常のプレビューアやデバッグツールで確認できます。

備考

HTTP/2 は v26.0.0 以降の通常の Proxyman macOS 版で利用できます。初期設定ではオフになっています。別途ベータ版のアプリを使う必要はなくなりました。

2. メリット​

  • Proxyman を経由するアプリやブラウザの HTTP/2 リクエストとレスポンスを確認できます。
  • 共有接続上で同時に送られるリクエストを追跡できます。
  • ヘッダー、ボディ、ボディの後に送られるトレーラーヘッダーを確認できます。
  • キャプチャしたリクエストで使われている HTTP バージョンを確認できます。
  • 記録されている場合は、Connection Log で上流のプロトコルを確認できます。

HTTP/2 は、ヘッダー圧縮と接続の再利用によってオーバーヘッドを減らします。効果はアプリ、サーバー、ネットワークによって異なります。有効にしても、すべてのリクエストが速くなるわけではありません。

3. 有効にする方法​

  1. Mac で Proxyman v26.0.0 以降を開きます。
  2. Proxyman → Settings → General を開きます。
  3. Proxy セクションで Use HTTP/2 をオンにします。
  4. HTTPS の通信を確認する場合は、クライアントデバイスに Proxyman の証明書をインストールして信頼します。
  5. アプリまたはドメインに対して SSL Proxying を有効にします。
  6. 新しいリクエストを送るか、ページを再読み込みします。
ポート番号と記録オプションの下に Use HTTP/2 にチェックが入った、Proxyman の Settings の General タブ

Use HTTP/2 をオンにする

警告

この設定を変更すると、既存の接続が閉じられます。その後、新しいリクエストを送ってください。開いている WebSocket および Server-Sent Events の接続は、再接続が必要になる場合もあります。

証明書の設定については、macOS ガイドをご覧ください。リモートデバイスでは、証明書を信頼したうえで、Mac 上の Proxyman を経由して通信させる必要があります。セットアップ方法は iOS または Android のガイドをご覧ください。

HTTP/2 をオフにするには、同じ Settings のセクションで Use HTTP/2 のチェックを外します。

スクリプトからは、proxyman-cli http-version status または proxyman-cli http-version set prefer_http2 を使います。構文と JSON 出力については、HTTP version のコマンドラインガイド をご覧ください。

4. キャプチャされる内容​

メインのリストでリクエストを選択すると、次の詳細情報を確認できます:

  • リクエストのメソッド、URL、クエリパラメータ、Cookie、ヘッダー
  • JSON、フォームデータ、テキスト、バイナリなどのリクエストボディとレスポンスボディ
  • レスポンスのステータスとヘッダー
  • 存在する場合は、リクエストとレスポンスのトレーラー
  • タイミングと HTTP バージョンの情報
  • 上流のプロトコルネゴシエーションを含む、記録された接続の詳細

トレーラーとは、ボディの後に送られるヘッダーです。gRPC の通信では、ヘッダーまたはトレーラーの grpc-status と grpc-message を確認してください。HTTP 200 だけでは RPC が成功したとは判断できません。バイナリのペイロードは、さらにデコードが必要な場合があります。

5. プロトコルを確認する方法​

この設定では、HTTP/2 を許可し、HTTP/1.1 へのフォールバックも行えます。すべてのリクエストが HTTP/2 を使うことは保証されません。

接続は 2 つあります:

  • クライアント側の接続:アプリまたはブラウザから Proxyman への接続
  • 上流の接続:Proxyman からサーバーへの接続

2 つの接続では、異なる HTTP バージョンが使われる場合があります。クライアント側の接続については、リクエストの HTTP バージョンを確認してください。記録されている場合は、Request パネルの Connection Log を開くと上流のプロトコルを確認できます。

  • h2 は HTTP/2 を意味します。
  • http/1.1 は HTTP/1.1 を意味します。
  • 提示されたプロトコルは、サーバーがそれを選択したことの証拠にはなりません。受け入れられたプロトコルを確認してください。
  • 古い保存済みのキャプチャには、上流のプロトコルの詳細が含まれていない場合があります。データがないことは、HTTP/1.1 であることを意味しません。

6. Connection Log の接続情報​

  • リクエストを選択し、Request パネルで Summary の隣にある Connection Log を開きます。
  • curl -v に似たログを確認できます。DNS の解決結果、接続の試行、TLS と証明書の詳細、HTTP ヘッダーが含まれます。
  • ALPN: server accepted h2 を確認すると、上流の接続で HTTP/2 が使われていることを確認できます。再利用された接続には Re-using existing connection と表示されます。
  • * は接続のイベント、> はリクエスト、< はレスポンスを示します。

サンプル値を使った抜粋の例:

* Host api.example.com:443 was resolved.
* IPv4: 192.0.2.10
* Connected to api.example.com (192.0.2.10) port 443
* ALPN: Proxyman offers h2,http/1.1
* SSL connection using TLSv1.3 / TLS_AES_128_GCM_SHA256
* ALPN: server accepted h2
* using HTTP/2
> GET /profile HTTP/2
< HTTP/2 200 OK
* Connection #0 to host api.example.com left intact

タブが表示されない場合は、Custom Previewer Tab で Request の Connection Log を有効にしてください。すべてのフィールドについては、Connection Log ガイド をご覧ください。

7. トラブルシューティング​

リクエストがまだ HTTP/1.1 を使っている場合は、次を確認してください:

  • Use HTTP/2 がオンになっているか確認し、新しいリクエストを送ります。
  • クライアントが HTTP/2 に対応し、ネゴシエートしているか確認します。
  • 上流のサーバーが HTTP/2 に対応しているか確認します。フォールバックは想定どおりの動作の場合もあります。
  • どちら側が HTTP/1.1 を使ったかを判断する前に、両方の接続を確認してください。

HTTPS の通信が表示されない場合は、次を確認してください:

  • クライアントが Proxyman を経由して通信しているか確認します。
  • 証明書の信頼設定と、ドメインの SSL Proxying ルールを確認します。
  • クライアントが証明書を拒否する場合は、SSL エラーをご覧ください。