4

Прежде чем перейти к реальному вопросу, позвольте мне объяснить, как работает мой проект: для простоты мой прокси находится на моем ноутбуке, где также находится клиент (мой браузер); удаленным сервером будет, например, YouTube.

Клиент подключен к определенному порту прокси благодаря плагину SwitchOmega: клиент хочет подключиться к www.youtube.com, и прокси получает следующий запрос:

CONNECT www.youtube.com:443 HTTP/1.1
Host: www.youtube.com:443
Proxy-Connection: keep-alive
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36

Мне сказали, что когда прокси получает запрос CONNECT , он должен открыть TCP-соединение с IP:Port, вернуть клиенту сообщение 200 OK и отправлять данные, пока одна сторона соединения не будет закрыта.

С другим плагином, который отслеживает HTTP-запросы, HTTP Trace, я вижу другой запрос в моем браузере:

GET https://www.youtube.com/
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
and other data...

Итак, почему мой прокси-сервер получает CONNECT www.youtube.com:443 HTTP/1.1 а HTTP Trace показывает GET https://www.youtube.com/? Они имеют в виду одно и то же?

2 ответа2

4

CONNECT занимается запросом

CONNECT

Метод CONNECT преобразует соединение запроса в прозрачный туннель TCP/IP, обычно для облегчения связи с шифрованием SSL (HTTPS) через незашифрованный HTTP-прокси.

Пока GET извлекает данные.

ПОЛУЧИТЬ

Метод GET запрашивает представление указанного ресурса. Запросы с использованием GET должны только извлекать данные и не должны иметь никакого другого эффекта. (Это также верно для некоторых других методов HTTP.) W3C опубликовал руководящие принципы по этому различию, заявив, что «дизайн веб-приложений должен основываться на вышеупомянутых принципах, а также на соответствующих ограничениях».

Источник - протокол передачи гипертекста

0

Я думаю, что вы имеете дело с косметической проблемой.

GET https://www.youtube.com/ , скорее всего, именно то, что зарегистрировано, чтобы указать, что выборка выполняется с помощью GET , и целью является https://www.youtube.com .

У прокси-сервера нет стандартизированного способа поддержки URI GET https:// , он был обсужден пару лет назад в IETF HTTP WG, но отброшен по разным причинам (проблемы доверия к прокси в основном, если я помню)

Очень маловероятно, что запрос будет отправлен прокси. Как уже говорили другие, CONNECT используется для подключения к www.youtube.com:443 , тогда будет некоторый другой запрос GET, который не содержит части URI схемы (протокола) или полномочий (сервер: порт и т.д.).

В вашем примере это будет:

GET / HTTP/1.1
host: www.youtube.com:443

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .