クライアントストリームを中継する前にCONNECTヘッダーの解析を完了する
リクエスト行の後だけで中継するプロキシサーバーは、自分自身のHostヘッダーを宛先のTLSポートに送ってしまう可能性があります。
CONNECTリクエスト行の後、これらのバイトはまだプロキシに属しています。
CONNECT service.example:443 HTTP/1.1\r\n
Host: service.example:443\r\n
User-Agent: example-client\r\n
\r\nHost や User-Agent をポート443へ転送すると、宛先がTLSを期待している場所に平文のヘッダーを渡すことになります。この失敗は、暗号の選択が問題になる前に起こり得ます。
- セットアップ期限とヘッダーサイズの上限の範囲内で、空行のヘッダー終端まで読み取って解析します。
- プロキシ認証と宛先ポリシーを適用します。
- 承認されたターゲット接続を確立します。
- 成功したCONNECT応答を送信し、トンネルモードに入ります。
境界の後のバッファされたバイトは、適切な次の状態のために保持してください。破棄したり、プロキシのリクエストヘッダーをウェブサイトの後続リクエストとして扱ったりしないでください。
クライアントには応答側の対応する義務があります。トンネル化されたプロトコルを開始する前に、成功したCONNECT応答の読み取りを完了することです。両端は、ストリームが役割を変える境界について合意しなければなりません。