Explicit HTTP Proxy Styles

最終更新: 2026-11-03 12:15:20 +0800 +0800
tags: Http | Proxy | TLS
原文は英語で書かれています。あなたはAI翻訳版を読んでいます。

プロキシの比較 #

プロキシの動作 ↓ / クライアント → プロキシホップ →プロキシへの HTTPプロキシへの HTTPS
フォワードプロキシ — クライアントが絶対形式のリクエスト(例: GET http://target/path)を送信利点: 最も単純で広く対応され、プロキシは HTTP リクエストの認証、キャッシュ、フィルタリング、ルーティング、ログ記録を行える。プロトコルのオーバーヘッドも小さい。 欠点: 宛先のペイロードを別途保護しない限り、クライアントからプロキシへのリクエスト、ヘッダー、URL、本文は平文であり、信頼できないローカルネットワークでは安全でない。利点: クライアントからプロキシへのホップを暗号化し、ローカルネットワークからプロキシ認証情報と HTTP リクエストの詳細を隠せる。TLS 終端後もプロキシは HTTP を認識した機能を維持する。 欠点: TLS の確立と CPU コストが増える。プロキシはリクエスト内容を閲覧・変更でき、HTTP プロキシ URL より普遍的に導入・設定されているわけではない。
トンネルプロキシ — クライアントが CONNECT host:port を送信してからバイト列をストリーム転送利点: プロキシ経由で HTTPS オリジンへ到達する標準的で互換性の高い方法。エンドツーエンド TLS はクライアントと宛先の間に残り、通常プロキシは HTTP ペイロードを検査できない。 欠点: クライアントからプロキシへのホップでは CONNECT リクエストと宛先ホスト/ポートが平文。プロキシ通信は観測でき、ブロックや制限の対象になり、TLS インターセプトなしでは HTTP キャッシュやリクエスト単位のポリシーを適用できない。利点: CONNECT の確立(プロキシ認証と宛先オーソリティを含む)とトンネルホップの両方を暗号化する。トンネル内で HTTPS を使えば、信頼できないローカルネットワークに対して多層の保護を提供する。 欠点: TLS 層が 2 つになり、確立のオーバーヘッドが増える。デバッグが難しく、互換性もやや低い。プロキシは外側の TLS を復号した後も接続メタデータを観測でき、ポリシーは主に接続単位にとどまる。

「プロキシへの HTTPS」とは、https://proxy.example:443 のような設定でプロキシ自体へ TLS 経由で接続することです。 宛先サイトが HTTPS を使うかどうかとは独立しています。

HTTP トランスクリプトの例 #

http
# Forward proxy over HTTP: these HTTP bytes are visible on the client-to-proxy hop.
Client -> proxy
GET http://origin.example/reports/42 HTTP/1.1
Host: origin.example
Proxy-Authorization: Basic <credentials>

Proxy -> client
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 11

{"ok":true}
http
# Forward proxy over HTTPS: the wire carries TLS records to proxy.example.
# After TLS decryption at the proxy, the HTTP exchange is:
Client -> proxy
GET http://origin.example/reports/42 HTTP/1.1
Host: origin.example
Proxy-Authorization: Basic <credentials>

Proxy -> client
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 11

{"ok":true}
http
# Tunnel proxy over HTTP: CONNECT headers are visible on the client-to-proxy hop.
Client -> proxy
CONNECT origin.example:443 HTTP/1.1
Host: origin.example:443
Proxy-Authorization: Basic <credentials>

Proxy -> client
HTTP/1.1 200 Connection Established

# Subsequent bytes are an end-to-end TLS session with origin.example;
# the origin HTTP requests are not exposed to the proxy.
http
# Tunnel proxy over HTTPS: the wire carries outer TLS records to proxy.example.
# After outer TLS decryption at the proxy, the HTTP exchange is:
Client -> proxy
CONNECT origin.example:443 HTTP/1.1
Host: origin.example:443
Proxy-Authorization: Basic <credentials>

Proxy -> client
HTTP/1.1 200 Connection Established

# Subsequent bytes carry an inner TLS session with origin.example inside the
# outer TLS connection; origin HTTP requests remain encrypted from the proxy
# and end-to-end to origin.example.

コメント

GitHub で閲覧・コメントする(投稿にはログインが必要です)