成功した HTTP/1.1 CONNECT 応答はヘッダー部分の後で終わります。

HTTP/1.1 200 Connection Established

この境界より後は、同じ接続がトンネルを運びます。HTTPS の宛先では、次のクライアントのバイトが通常そのまま宛先との TLS 交換を始めます。

プロキシは成功した CONNECT 応答に Transfer-Encoding や Content-Length を追加してはなりません。chunk に分割する HTTP 応答ボディは存在しません。空の終端 chunk を付け足すと、かえって新しいトンネルにバイトを注入することになります。

クライアント側にも要件があります。2xx の CONNECT 応答にこれらのフレーミングフィールドが現れたら、無視しなければなりません。したがって、不正な送信者を理由に、準拠したすべてのクライアントが分割ボディを待っていると説明することはできません。

確立した接続は中継のために開いたままにします。200 の後に閉じるとトンネルは壊れます。別の接続を開くことは、受け入れた CONNECT リクエストの継続ではありません。

失敗した CONNECT 応答は扱いが異なり、通常の HTTP エラーボディを運べます。プロキシのトレースを実装または読むときは、その応答を成功した引き渡しと切り分けてください。

関連記事