ウェブフォーム型プロキシは出口IPだけでなくブラウザのオリジンを変える
URL入力欄のあるプロキシサイトとブラウザ本来のプロキシの違いを整理し、複雑なログインやスクリプトが別の挙動を示す理由を説明します。
URL欄のあるページはウェブアプリケーションです。そこに宛先を入力すると、そのアプリケーションにコンテンツを取得して表示するよう求めていることになります。これはブラウザにHTTPやSOCKSのプロキシを使わせるのとは別の仕組みです。
ネイティブのプロキシ設定では、ブラウザは宛先のURLを依然としてウェブサイトとして扱います。従来のウェブフォーム型プロキシでは、表示されるページはプロキシ側アプリケーション自身のURLスキームとオリジンを通じて配信されます。サービスは遷移を続けるためにリンク、スクリプト、ヘッダー、Cookieを書き換えることがあります。
| 挙動 | 違いが重要な理由 |
|---|---|
| 同一オリジンの検査 | ブラウザは実際に読み込んだオリジンを評価する |
| Cookieとリダイレクト | ドメイン、パス、セキュアコンテキストの挙動が提示されたURLと一致する必要がある |
| 新しいURLを組み立てるスクリプト | リクエストは単純なリンク書き換えの枠を外れることがある |
| 持続接続やWebSockets | プロキシ側アプリケーションには明示的な互換対応が要る |
これでよくある結果が説明できます。単純な記事は読み込めるのに、文書エディタやログインの流れは失敗します。その失敗は、宛先がサービスの出口IPを拒否しているという意味とは限りません。中継側が、URLとブラウザのセキュリティに関するアプリケーションの前提を保てない可能性があります。
TLSがどこで終わるかも区別してください。宛先のコンテンツを取得して再公開するサービスは、暗号化されたセッションを運ぶ通常のCONNECTリレーとは異なる信頼の位置にあります。プロキシサイト自身のアドレスでHTTPSが見えることは、ブラウザから元のサイトまでのEnd-to-EndのTLS接続を裏づけません。
目的が別の出口経由の通常の閲覧なら、利用中のサービスまたはプロキシ一覧からHTTPかSOCKSのエンドポイントを選び、対応しているネイティブのプロキシ設定を使ってください。たとえばFirefoxの接続設定です。これは通常、ブラウザの宛先の意味づけをより多く保ちます。URL入力欄のサイトは意図して選ぶアプリケーションではありえますが、設定が少ないだけで同じインターフェースだと示すべきではありません。