HTTP: полное руководство говорит
Исходный сервер, который виртуально не размещен и не позволяет ресурсам различаться в зависимости от запрашиваемого хоста, может игнорировать значение поля заголовка Host. Но любой исходный сервер, который различает ресурсы на основе хоста, должен использовать следующие правила для определения запрошенного ресурса в запросе HTTP / 1.1:
Если URL-адрес в сообщении HTTP-запроса является абсолютным (т.е. содержит схему и компонент хоста), значение в заголовке Host игнорируется в пользу URL.
Если URL-адрес в сообщении HTTP-запроса не имеет хоста, а запрос содержит заголовок Host, значение хоста / порта получается из заголовка Host.
Если на шагах 1 или 2 невозможно определить действительный хост, клиенту возвращается ответ 400 Bad Response.
Где находится «URL-адрес в сообщении HTTP-запроса»?
Это тот, который указан в строке запроса (в первой строке HTTP-запроса, после такого метода, как GET
)?
Спасибо.
URL-адрес не обязательно должен появляться где-либо в HTTP-запросе (кроме случаев, когда он отправляется через прокси; см. Ниже).
В пункте 2 цитаты из вашей книги есть ошибка. URL-адрес не отображается в строке запроса в исходной форме, наиболее распространенной форме цели HTTP-запроса. В запросе обычно появляются только определенные компоненты URL-адреса, то есть хост (и порт, если применимо), который отображается в заголовке Host, а также путь и строка запроса, которые появляются в строке запроса. Одна вещь, которая не отображается в запросе, - это схема (http или https), которая иногда подходит разработчикам, если веб-приложению действительно необходимо знать схему.
Альтернативная форма строки запроса может содержать полный URL-адрес в качестве цели запроса, и серверы обязательно должны иметь возможность обрабатывать этот формат, известный как абсолютная форма. Эта форма обычно не видна, за исключением случаев, когда пользовательский агент сознательно обращается к прокси-серверу HTTP. В этом случае прокси-сервер должен знать схему, чтобы он мог попытаться передать запрос, а полная форма URL - это способ сделать это, определенное в соответствующем стандарте (RFC 7230).