HTTP 2 будет поддерживать push сервера, что это значит?

Я много чего читал о HTTP 2 (который все еще находится в разработке), поэтому я также слышал о функции push-уведомлений сервера, но, по моему мнению, это не ясно.

Означает ли эта функция принудительной отправки сервера, что сервер сможет отправлять ответ клиенту без запроса последнего? Так же, как ванильное соединение TCP? Или я упускаю суть?

2 ответа

Решение

Механизм проталкивания HTTP2 не является универсальным механизмом проталкивания сервера, таким как веб-сокет или отправленные сервером события.

Он предназначен для определенной оптимизации HTTP-разговоров. В частности, когда клиент запрашивает ресурс (например, index.html), сервер может догадаться, что он собирается в следующий раз запросить группу связанных ресурсов (например, theme.css, jquery.js, logo.png и т. Д. И т. Д.) Как правило, веб-страница может иметь 10 таких запросов.

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

С помощью HTTP/2 сервер может отправлять в ответ на push-обещания index.html GET, чтобы сообщить клиенту, что он также собирается отправлять theme.css, jquery.js, logo.png и т. Д., Как если бы клиент имел просил их. Затем клиент может отменить эти нажатия или просто подождать, пока они не будут отправлены, без дополнительных задержек при многократных поездках.

Вот демонстрация толчка с SPDY (основа для HTTP2) с Jetty https://www.youtube.com/watch?v=4Ai_rrhM8gA. Вот блог о push-API для HTTP2 и SPDY в пристани: https://webtide.com/http2-push-with-experimental-servlet-api/

По сути, ваше понимание верно, однако, есть много чего еще.

Сервер сможет отправлять ресурс клиенту только после того, как был сделан запрос на страницу HTTP и ресурсы, требуемые этой страницей для правильной визуализации, т. Е. Были идентифицированы изображения, файлы JavaScript, CSS и т. Д. Механизмом, ответственным за это, является серверная структура. В Java это будет Servlet 4 и, возможно, JSF.

Сервер не может просто отправить какой-либо ресурс клиенту, когда ему это нравится. Только при вышеуказанных обстоятельствах это произойдет, и клиент всегда сможет отклонить запрос сервера на передачу ресурса.

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

Другие вопросы по тегам