Код состояния HTTP для сигнализации о плохом или отсутствующем заголовке хоста

Есть ли код состояния HTTP, который подходит для использования для клиентов, которые отправляют неверное имя хоста (или вообще не отправляют) через SNI или заголовок HTTP Host?

старый вопрос касается, в первую очередь, того, как и почему возникают такие запросы, а также как вы можете технически справиться с ними в Apache. Однако он не касается выбора кода состояния для ответа.

В прошлом я реализовал прокси-сервер HTTP, который отправлял код состояния 502 и страницу html, объясняющую, почему было создано сообщение об ошибке. Моим обоснованием использования 502 было ожидание, что я увижу его в основном из-за неправильной конфигурации, что означало, что прокси-сервер не мог найти подходящего бэкэнда. В действительности оказалось, что гораздо чаще просто видеть полностью поддельные имена хостов.

Есть ли другой код состояния, который более подходит и четко сигнализирует клиенту, что сервер на этом IP-адресе не распознает значение, отправленное через SNI и / или заголовок хоста?

6
задан 27 January 2018 в 21:29
1 ответ

RFC 6066 не указывает и даже не рекомендует какую-либо конкретную ошибку HTTP в случае, если имя хоста, отправленное через SNI, не соответствует заголовку хоста HTTP. Он действительно рекомендует серверу прервать квитирование TLS, если имя хоста SNI не является тем, для которого он предоставляет услуги. Из раздела 3 :

Если сервер распознал расширение ClientHello, но не распознает имя сервера, сервер ДОЛЖЕН использовать одно из двух действия: либо прервать рукопожатие, отправив сообщение о фатальном уровне unrecognized_name (112) или продолжить рукопожатие.

Поскольку такой неверно сформированный запрос может пройти после подтверждения TLS и должен быть отклонен в HTTP, необходим код ответа HTTP. Из всех существующих только один действительно подходит к ситуации:

6.5.1. 400 Bad Request

Код состояния 400 (Bad Request) указывает, что сервер не может или не будет обрабатывать запрос из-за чего-то, что считается ошибка клиента (например, неверный синтаксис запроса, недопустимый запрос кадрирование сообщения или вводящая в заблуждение маршрутизация запросов)

Фактически, это ответ, который определяет RFC 7230. Из раздела 5.4 , описывающего заголовок хоста:

Сервер ДОЛЖЕН отвечать кодом состояния 400 (неверный запрос) на любой Сообщение запроса HTTP / 1.1, в котором отсутствует поле заголовка узла, и к любому сообщение запроса, которое содержит более одного поля заголовка узла или Поле заголовка хоста с недопустимым значением поля.

Я настоятельно рекомендую вместо использовать для этого 502. Его семантика указывает, что что-то не так на стороне сервера и что запрос будет успешным, если попытаться позже.

13
ответ дан 3 December 2019 в 00:07

Теги

Похожие вопросы