TRACEとCONNECT — 診断とトンネルメソッド
診断用のTRACEとプロキシトンネル確立用のCONNECTという、めったに使われないHTTPメソッドについて解説します。
詳細な説明
TRACE: 診断用のリクエストエコー
TRACEメソッドはサーバーに受信したリクエストをエコーバックするよう求めます。これは中間装置(プロキシ、ロードバランサー)がリクエストに加えた変更を確認するための診断目的で使用されます。
TRACEの例
TRACE /test HTTP/1.1
Host: api.example.com
X-Custom-Header: test-value
HTTP/1.1 200 OK
Content-Type: message/http
TRACE /test HTTP/1.1
Host: api.example.com
X-Custom-Header: test-value
Via: 1.1 proxy.example.com
Viaヘッダーがプロキシによって追加されたことをTRACEが明らかにします。
TRACEのセキュリティ上の懸念
TRACEはクロスサイトトレーシング(XST)攻撃のため、ほとんどの本番サーバーで無効化されています。攻撃者がJavaScriptを使用してTRACEリクエストを送信し、ブラウザが自動的に付加するCookieやAuthorizationヘッダーを含むレスポンスを読み取ることで、機密認証情報を盗む可能性があります。
CONNECT: トンネルの確立
CONNECTはプロキシに宛先サーバーへのTCPトンネルを確立するよう要求します。これは主にHTTPプロキシを通じたHTTPS接続に使用されます。
CONNECTの例
CONNECT api.example.com:443 HTTP/1.1
Host: api.example.com:443
Proxy-Authorization: Basic dXNlcjpwYXNz
HTTP/1.1 200 Connection Established
トンネル確立後、後続のすべてのデータはクライアントとターゲットサーバー間でエンドツーエンドで暗号化されて直接流れます。プロキシは暗号化されたトラフィックを読み取ることができません。
プロパティの比較
| プロパティ | TRACE | CONNECT |
|---|---|---|
| 安全 | はい | いいえ |
| 冪等 | はい | いいえ |
| キャッシュ可能 | いいえ | いいえ |
| 主な用途 | 診断 | プロキシトンネリング |
| 一般的に有効 | いいえ | プロキシサーバー上 |
CONNECTに遭遇する場面
CONNECTを手動で呼び出すことはまれです。HTTPプロキシを設定してHTTPSサイトにアクセスすると、ブラウザが自動的に送信します。プロキシがトンネルを作成し、すべてのTLS暗号化トラフィックがそれを通過します。
ユースケース
ネットワークエンジニアがTRACEを使用して、カスタムヘッダーがクライアントとオリジンサーバー間で消える理由をデバッグし、リバースプロキシがそれを削除していることを発見します。企業ファイアウォールがCONNECTを使用して、HTTPプロキシを通じてHTTPSトラフィックを復号化せずに許可します。