Как правильно обрабатывать полностью определенный домен в GET-запросе? - PullRequest
0 голосов
/ 12 февраля 2011

Я пишу прокси-сервер.Когда я использую curl для извлечения страницы, скажем, http://www.foo.com/pants, curl делает следующий запрос:

GET /pants HTTP/1.1

Когда у меня есть curl, отправляющий этот запрос через мой локальный прокси, curl изменяет запрос GET на

GET http://www.foo.com/pants HTTP/1.1

Это изменение приводит к тому, что сервер foo.com возвращает 404. Не работает ли foo.com?Или полное доменное имя имеет значение только для прокси-серверов?Должен ли я всегда отбирать http://domain из запросов, которые я отправляю?

Спасибо!

Ответы [ 3 ]

3 голосов
/ 14 февраля 2011

Цитирование из rfc 2616, раздел 5.1.2 "Request-URI" , выделено мной:

Форма absoluteURI ТРЕБУЕТСЯ, когда запрос находитсясделано на прокси .Прокси запрашивается для пересылки запроса или обслуживания его из действительного кэша и возврата ответа.Обратите внимание, что прокси-сервер МОЖЕТ переслать запрос другому прокси-серверу или напрямую на сервер, указанный absoluteURI.Чтобы избежать циклов запросов, прокси-сервер ДОЛЖЕН иметь возможность распознавать все имена своих серверов, включая любые псевдонимы, локальные варианты и числовой IP-адрес.Пример строки запроса:

GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1

Чтобы разрешить переход к absoluteURI во всех запросах в будущих версиях HTTP, все серверы HTTP / 1.1 ДОЛЖНЫ принимать форму absoluteURI в запросах хотя клиенты HTTP / 1.1 будут генерировать их только в запросах к прокси.

2 голосов
/ 12 февраля 2011

Поскольку этот прокси-сервер должен устанавливать восходящее соединение с сервером, curl (и другие совместимые пользовательские агенты) отправляет полный URL-адрес. Ваш прокси должен удалить имя хоста, преобразовать его в IP, подключиться к восходящему каналу и затем отправить GET /pants HTTP/1.1.

1 голос
/ 12 февраля 2011

Когда клиент отправляет запрос через прокси на основе HTTP, он должен указать полный URL-адрес, поскольку прокси-сервер может поддерживать несколько целевых протоколов, которые могут быть представлены с помощью URL-адресов (т. Е. HTTP, FTP и т. Д.).Прокси-сервер несет ответственность за преобразование URL-адреса и запрос данных в более подходящем формате при передаче их на следующий сервер.

...