Чат Telegram
Группа ВКонтакте
http/2 server push - пушаем только при первом посещении

http/2 server push - пушаем только при первом посещении

В своей прошлой статье я показал реализацию http/2 server push. Однако, nghttp2 не умеет определять наличие кэша на клиенте и в приведенном примере, независимо от того, имеется ли у клиента файл, мы его пушали. Таким образом, для повторных соединений передавалось больше трафика, чем до того, как мы включили server push.

Онлайн-курсы PHP и MySQL
Обучение с полного нуля до уровня джуниора!
Начать бесплатно

Для того, чтобы это исправить, было решено идентифицировать повторные заходы посетителей и резать заголовки «link» до передачи nghttpx. Для идентификации повторного захода решено было использовать Cookie с именем http2pushed.
Для реализации этого механизма для своего сайта я использовал Varnish, так как он у меня используется после бэкенда-nginx`а для кэширования. В директиве sub vcl_deliver добавил строки:

    # Проверяем, установлена ли кука. 
    if (req.http.Cookie ~ "http2pushed") {
        # Если да, режем все заголовки "link", передаваемые с бэкенда
        unset resp.http.link;
    } else {
        # Иначе пропускаем заголовки в неизменном виде и добавляем куку клиенту
        set resp.http.Set-Cookie = "http2pushed=true;";
    }

После чего сервер будет пушать файлы только в первый раз. К сожалению, WebPagetest не поддерживает Cookie, в связи с этим не получится сделать сравнения из дата-центра.
Приложу только 2 своих скрина. Первый визит:

Повторный заход (рефреш страницы):

Присоединяйтесь к нам в ВКонтакте и в Facebook, чтобы не пропустить новые уроки. А также вступайте в наш чат PHP-разработчиков в Telegram.
Об авторе
Артём Ивашкевич
Артём Ивашкевич
Занимаюсь программированием более трех лет. В свободное время обучаю программированию на PHP других людей, потому что мне это нравится. Если вы интересуетесь темой IT и хотели бы стать разработчиком, рекомендую прочитать статью о том, как я стал программистом.
Самый понятный курс PHP
Онлайн-уроки в удобное время!
Начать бесплатно
Курс программирования на PHP
Подготовка до уровня устройства на работу!
Начать бесплатно
Комментарии (0)
Онлайн-курсы PHP и MySQL
Обучение с полного нуля до уровня джуниора!
Начать бесплатно
loader
Есть вопрос по программированию?
Здесь быстро ответят!
Задать вопрос
Онлайн обучение PHP
Путь с полного нуля до джуниора!
Начать бесплатно
loader
Форум веб-разработчиков
Здесь все!
Перейти
loader
Логические задачи с собеседований