クライアントは、解析できる完全な HTTP 応答を得るまで、プロキシの認証チャレンジに基づいて動作できません。ステータス行と Proxy-Authenticate フィールドには、ヘッダー部分を終える空行が依然として必要です。

ボディを持たない最小限の HTTP/1.1 応答は次の構造になります。

HTTP/1.1 407 Proxy Authentication Required<CRLF>
Proxy-Authenticate: Basic realm="local-proxy"<CRLF>
Content-Length: 0<CRLF>
<CRLF>

各 CRLF マーカーは復帰と改行のバイトを表し、リテラルのマーカー文字列ではありません。最後のヘッダー行はすでに CRLF で終わっており、追加の CRLF が空行を作ります。Content-Length はボディが続かないことを示します。

別のリクエストを待つ前に、完全な応答を送信またはフラッシュしてください。生のソケットでは、要求より少ないバイトしか送らない書き込みも考慮する必要があります。

407 には少なくとも 1 つの適用可能な Proxy-Authenticate チャレンジが必要です。クライアントが提示された方式をサポートし、資格情報を取得できれば、Proxy-Authorization で再試行できます。ウェブサイトの 401 と WWW-Authenticate フィールドは別のホップに関するものです。

この Basic チャレンジはフレーミングの例であり、完全な認証設計ではありません。機密性が重要な場合、Basic 資格情報には保護された接続が必要です。チャレンジを送信しても、パスワード検証、リクエスト解析、CONNECT トンネリングは実装されません。

関連記事