Ответ 1
Да, это выглядит как действительный рабочий процесс для описанной вами ситуации, и те заголовки Authenticate, похоже, находятся в правильном формате.
Интересно отметить, что возможно, хотя и маловероятно, для данного соединения задействовать несколько прокси-серверов, которые соединены вместе, и каждый сам может потребовать аутентификации. В этом случае клиентская сторона каждого промежуточного прокси-сервера сама вернет сообщение 407 Proxy Authentication Required
и сама повторит запрос с заголовком Proxy-Authorization
; Заголовки Proxy-Authenticate
и Proxy-Authorization
представляют собой заголовки с одним ходом, которые не передаются с одного сервера на другой, но WWW-Authenticate
и Authorization
представляют собой сквозные заголовки, которые считаются от клиента до конечный сервер, переданный посредниками через дословно.
Поскольку схема Basic
отправляет пароль в clear (base64 - обратимая кодировка), он чаще всего используется через SSL. Этот сценарий выполняется по-другому, поскольку желательно, чтобы прокси-сервер не мог видеть пароль, отправленный на конечный сервер:
- клиент открывает канал SSL для прокси-сервера, чтобы инициировать запрос, но вместо отправки обычного HTTP-запроса он отправил специальный
CONNECT
запрос (все еще с заголовкомProxy-Authorization
), чтобы открыть туннель TCP на удаленном сервере. - Затем клиент переходит к созданию другого канала SSL, вложенного в первое, по которому он передает окончательное сообщение HTTP, включая заголовок
Authorization
.
В этом случае прокси-сервер знает только хост и порт, к которому подключен клиент, а не тот, который был передан или получен по внутреннему каналу SSL. Кроме того, использование вложенных каналов позволяет клиенту "видеть" SSL-сертификаты как прокси-сервера, так и сервера, что позволяет идентифицировать оба пользователя для аутентификации.