Поэтому мне интересно, включить ли Server Push или нет.
Я знаю, что HTTP / 2 обновляется с HTTP / 1, что означает, что любой клиент, не поддерживающий HTTP / 2, вернется к HTTP / 1 и продолжит работу в обычном режиме.
Но что происходит, когда клиент поддерживает HTTP / 2, но не поддерживает Server Push или активно отклоняет / ограничивает запросы Push?
Боюсь, что из-за этого часть ресурсов может не передаваться клиенту. Следует ли мне готовиться к такому повороту событий или это не проблема?
Клиент укажет, что он не включен, установив для параметра SETTINGS_ENABLE_PUSH значение 0 во время установки соединения HTTP / 2.
PUSH_PROMISE НЕ ДОЛЖЕН отправляться, если параметр SETTINGS_ENABLE_PUSH одноранговой конечной точки установлен на 0. Конечная точка, которая установила этот параметр и получила подтверждение, ДОЛЖНА обрабатывать получение кадра PUSH_PROMISE как ошибку соединения (раздел 5.4.1) типа PROTOCOL_ERROR .
Но HTTP / 2 Push может легко использоваться владельцами сайтов, если они чрезмерно продвигают ресурсы, которые могут не понадобиться клиенту или которые уже кэшированы. Клиенты могут сбросить поток, чтобы указать, что им не нужен переданный ресурс, но это не очень хорошо, поскольку это все еще дополнительная работа как для клиента, так и для сервера.
Владельцы веб-сайтов должны использовать различные методы, чтобы гарантировать, что они размещают только соответствующий контент. Я подробно описываю один такой простой метод в этом сообщении в блоге: https://www.tunetheweb.com/performance/http2/http2-push/. Рабочая группа HTTP работает над Дайджесты кеша который в конечном итоге должен формализовать метод этого, но в настоящее время это все еще определяется.