Продолжаю писать Proxy-сервер. Читаю RFC 2616 ( HTTP 1.1 ). Не совсем понятно, что делать, когда URI в первой строке приходит в виде, отличном от absoluteURI. В разделе 5.1.2 RFC 2616( http://www.ietf.org/rfc/rfc2616.txt ) указано, что Request-URI может быть четырех видов: Request-URI = "*" | absoluteURI | abs_path | authority Там же написано следующее: The absoluteURI form is REQUIRED when the request is being made to a proxy. The proxy is requested to forward the request or service it from a valid cache, and return the response. Note that the proxy MAY forward the request on to another proxy or directly to the server specified by the absoluteURI. In order to avoid request loops, a proxy MUST be able to recognize all of its server names, including any aliases, local variations, and the numeric IP address. An example Request-Line would be: GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.1 Таким образом от клиентов, соответствующих HTTP/1.1 я должен получать только запросы в виде absoluteURI, такие, как приведенный выше. Интересна ситуация с несоответствующими спецификации клиентами. Теоретически, я могу получить запрос вида GET /rfc/rfc2616.txt HTTP/1.1 Host: www.ietf.org ... Что нужно делать в таком случае? Генерировать ошибку, преобразовывать в виде absoluteURI (в случае перенаправления на другой proxy нужно преобразовывать, но я хочу сразу доставлять запрос на целевой сервер) или передавать на сервер в таком виде? При этом в разделе 5.2 указаны правила для origin server(то есть того сервера, кому предназначается запрос). Там написано, что в случае, когда запрос идет не по absoluteURL, определять виртуальный хост нужно по заголовку "Host: ". Цитата: 2. If the Request-URI is not an absoluteURI, and the request includes a Host header field, the host is determined by the Host header field value. В разделе 14.23 написано, что Host позволяет серверу и шлюзу (gateway) определять, к какому конкретно виртуальному хосту принадлежит URL: This allows the origin server or gateway to differentiate between internally-ambiguous URLs, such as the root "/" URL of a server for multiple host names on a single IP address. Видимо, поле Host не предназначено для proxy. Сказано лишь, что proxy должны проверять наличие этого поля и выдавать 400 ( Bad Request) в случае отсутствия. Прошу помочь найти описание поведения proxy в такой ситуации. Также хотелось бы знать, можно ли выдавать ошибку, если поведение не описано спецификацией.
Ответ на:
комментарий
от anonymous
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум Получить данные через HTTP proxy (2005)
- Форум [nginx] динамическое проксирование на основе данных из запроса (2012)
- Форум HTTP POST: chunked без Content-Length = 411 Length Required (2014)
- Форум Вопросы по ICMP Redirect. (2015)
- Форум Nginx как SSL клиент (2017)
- Форум Помогите побороть squid (2003)
- Форум ускаритель нтмл сервера(squid) (2002)
- Форум nginx cors Access-Control-Allow-Origin (2018)
- Форум Nginx не верно проксирует запрос (2018)
- Форум nginx cors (2019)