Назад | Перейти на главную страницу

Отключить повторное использование соединения HTTP / 2 в доменах

RFC 7540, § 9.1.1 утверждает, что

Соединения [...] МОГУТ быть повторно использованы для запросов с несколькими различными компонентами полномочий [...] URI, если исходный сервер является полномочным [...].

Так, например, если один и тот же исходный сервер может обслуживать foo.example.com и bar.example.com, тогда клиент может повторно использовать соединение для отправки запросов в оба пункта назначения. Когда это нежелательно, в том же разделе говорится

Сервер, который не хочет, чтобы клиенты повторно использовали соединения, может указать, что он не является авторитетным для запроса, отправив код состояния 421 (неверный запрос) в ответ на запрос [...].

Это может возникнуть в некоторых неожиданных ситуациях, например, когда используются виртуальные серверы и их конфигурация TLS отличается но они совместно используют сертификат с использованием подстановочных знаков или альтернативных имен субъектов.

К сожалению, конечным результатом является один или несколько дополнительных циклов приема-передачи: клиент оптимистично повторно использует соединение, сервер отклоняет запрос, а затем клиент должен открыть новое соединение и повторить попытку. В худшем случае это может быть так же плохо, а может быть, даже хуже, чем просто использование соединений HTTP / 1.1 без повторного использования. Кажется, что это особенно плохо, когда есть много разных мест назначения, используемых одним и тем же исходным сервером и разыскиваемых одним и тем же клиентом, поскольку каждый раз, когда новое соединение открывается в ответ на 421, клиент все еще чувствует, что он может повторно использовать который соединение, и поэтому 421 могут происходить почти так же часто, как и полезные ответы.

Предполагая, что основная проблема неразрешима или, по крайней мере, условия, при которых отправляется ответ 421, находятся вне контроля администратора сервера, но факт, что это произойдет, известен, есть ли способ заранее сообщить клиентам, чтобы они не использовали повторно соединения между доменами? Это по-прежнему оставляет основное преимущество повторного использования соединения HTTP / 2, а именно то, что несколько запросов к тем же домен можно мультиплексировать в одном соединении, избегая при этом ожидаемых ответов 421.

Ядерный вариант - просто поместить сервер, требующий особой конфигурации, на отдельный IP-адрес, чтобы браузер не мог повторно использовать соединение. Если сайт предназначен для доступа в Интернет, то он должен быть отдельным Глобальный IP-адрес, а не отдельный адрес RFC1918 в вашей локальной сети.

Кажется, вы думаете, что ошибка 421 находится вне контроля администратора сервера. Это неправда. Это происходит полностью из-за настроек конфигурации администратора сервера.

Если вы не хотите, чтобы это происходило, используйте другие сертификаты TLS в дополнение к другой конфигурации TLS для имен, для которых вы не хотите использовать соединение HTTP / 2. Поскольку соединение может быть повторно использовано только для имен в этом сертификате TLS, несоответствие означает, что клиент должен открыть новое соединение.