УДК 004.432
ББК 32.972.1
П26
П26 HTTP/2 в действии / пер. с анг. П. М. Бомбаковой. – М.: ДМК Пресс, 2021. –
424 с.: ил.
Поллард Б.
ISBN 978-5-97060-925-5
После изучения этой книги читатели приобретут четкое представление о том, что
представляют собой протокол HTTP/2 и связанные с ним технологии.
В части I обсуждается предыстория появления протокола и объясняется, в чем
состоят его преимущества перед HTTP/1.1. Рассматриваются способы переноса
веб-сайта на HTTP/2; приводятся инструкции по установке таких популярных вебсервисов,
как Apache, nginx, IIS. Часть II описывает сам протокол и порядок установки
HTTP/2-соединения, рассказывает об основном формате фреймов HTTP/2;
отдельная глава посвящена push-серверу HTTP/2, который является новой частью
протокола. Часть III содержит информацию о глубинных компонентах протокола, на
которые не могут повлиять ни веб-разработчики, ни администраторы веб-серверов,
и освещает различия между реализациями развертывания протокола HTTP/2. Наконец,
в части IV обозначены перспективы развития протокола HTTP и способы его
дальнейшего улучшения.
Издание адресовано веб-разработчикам, администраторам веб-сайтов и тем, кто
интересуется интернет-технологиями, в частности оптимизацией веб-произ во дительности.
В книге приведены ссылки, которые пригодятся читателям для дальнейшего
изучения темы.
УДК 004.432
ББК 32.972.1
Original English language edition published by Manning Publications USA, USA. Russian-language
edition copyright © 2021 by DMK Press. All rights reserved.
Все права защищены. Любая часть этой книги не может быть воспроизведена в какой
бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев
авторских прав.
ISBN 978-1-6172-9516-4 (анг.)
ISBN 978-5-97060-925-5 (рус.)
© Manning Publications, 2019
© Оформление, издание, перевод, ДМК Пресс, 2021
Стр.5
Содержание
Оглавление ..................................................................................................6
Предисловие .............................................................................................13
Благодарности ..........................................................................................15
Об этой книге ...........................................................................................18
Об авторе ...................................................................................................22
Об иллюстрации на обложке .................................................................23
Часть I ПЕРЕХОД НА HTTP/2 ......................................................24
Веб-технологии и HTTP ...............................................................25
1
1.1 О том, как работает сеть ..............................................................26
1.1.1 Internet и Всемирная паутина ...............................................26
1.1.2 Что происходит, когда вы просматриваете
веб-страницы? ......................................................................27
1.2 Что такое HTTP?.............................................................................32
1.3 Синтаксическая структура HTTP и история его создания ...39
1.3.1 HTTP/0.9 .................................................................................39
1.3.2 HTTP/1.0 .................................................................................40
1.3.3 HTTP/1.1 .................................................................................47
1.4 Введение в HTTPS .........................................................................52
1.5 Инструменты для просмотра, отправки и получения
HTTP-сообщений ...........................................................................56
1.5.1 Использование инструментов разработчика
в веб-браузерах .......................................................................57
1.5.2 Отправка HTTP-запросов .....................................................58
1.5.3 Другие инструменты для просмотра и отправки
HTTP-запросов .......................................................................59
Резюме .......................................................................................................60
Стр.8
8
Содержание
2
Путь к HTTP/2 ...................................................................................61
2.1 HTTP/1.1 и современная Всемирная паутина .........................62
2.1.1 Основные проблемы с производительностью HTTP/1.1........65
2.1.2 Конвейеризация HTTP/1.1 ......................................................67
2.1.3 Использование каскадных диаграмм для анализа
производительности .............................................................68
2.2 Пути решения проблем с производительностью ...................70
2.2.1 Создание параллельных HTTP-соединений ............................71
2.2.2 Сокращение количества запросов .........................................74
2.2.3 Вывод ......................................................................................76
2.3 Другие проблемы HTTP/1.1 .........................................................76
2.4 Практические примеры ...............................................................77
2.4.1 Пример 1: amazon.com ...........................................................77
2.4.2 Пример 2: imgur.com...............................................................82
2.4.3 Насколько проблема серьезна? ...............................................83
2.5 Переход от HTTP/1.1 к HTTP/2 ....................................................84
2.5.1 SPDY .......................................................................................85
2.5.2 HTTP/2 ....................................................................................87
2.6 Значение HTTP/2 для веб-производительности ........................88
2.6.1 Пример предельной производительности HTTP/2 ................88
2.6.2 Какой прирост производительности может обеспечить
HTTP/2? ..................................................................................91
2.6.3 Обходные пути для HTTP/1.1 как потенциальные тупики ...96
3
Резюме .......................................................................................................96
Переход на HTTP/2 ...........................................................................97
3.1 Поддержка HTTP ...........................................................................97
3.1.1 Поддержка HTTP/2 cо стороны веб-браузера .......................98
3.1.2 Поддержка HTTP/2 серверами .............................................104
3.1.3 Откат к предыдущим версиям, в случае если поддержка
HTTP/2 невозможна .............................................................106
3.2 Способы перехода вашего сайта на HTTP/2 ..........................107
3.2.1 HTTP/2 на вашем веб-сервере ..............................................107
3.2.2 HTTP/2 с обратным прокси-сервером .................................110
3.2.3 HTTP/2 и CDN .......................................................................113
3.2.4 Вывод по реализации HTTP/2 ...............................................115
3.3 Устранение неполадок при настройке HTTP/2 .....................115
Резюме .....................................................................................................119
Часть II ИСПОЛЬЗОВАНИЕ HTTP/2 ......................................120
Основы протокола HTTP/2 ......................................................121
4
4.1 Почему HTTP/2, а не HTTP/1.2? ................................................121
4.1.1 Двоичный, а не текстовый ..................................................123
Стр.9
Содержание
9
4.1.2 Мультиплексирование вместо синхронности ....................124
4.1.3 Приоритет потоков и управление ими...............................128
4.1.4 Сжатие заголовков ..............................................................129
4.1.5 Server push ............................................................................130
4.2 Как устанавливается HTTP/2-соединение .............................130
4.2.1 Использование HTTPS-рукопожатия ..................................131
4.2.2 HTTP-заголовок Upgrade........................................................138
4.2.3 Применение заранее известного протокола .......................141
4.2.4 Протокол HTTP Alternative Services .....................................142
4.2.5 Преамбула соединения HTTP/2 ............................................143
4.3 Фреймы HTTP/2 ...........................................................................144
4.3.1 Просмотр фреймов HTTP/2 .................................................144
4.3.2 Формат фреймов HTTP/2 ....................................................151
4.3.3 Исследование потока сообщений HTTP/2 на примерах .......153
4.3.4 Дополнительные фреймы ....................................................168
5
Резюме .....................................................................................................172
Реализация HTTP/2 push ............................................................173
5.1 Что такое HTTP/2 server push? ..................................................173
5.2 Как отправлять push-сообщения .............................................177
5.2.1 Отправка push-сообщений с помощью HTTP-заголовка
ссылки ...................................................................................177
5.2.2 Просмотр ресурсов, отправленных с помощью
HTTP/2 push ..........................................................................180
5.2.3 Загрузка ресурсов посредством push из нисходящих
систем с помощью заголовков ссылок .................................183
5.2.4 Предварительная push-загрузка ресурсов ...........................186
5.2.5 Другие способы push-загрузки ..............................................193
5.3 Как работает HTTP/2 push в браузере .....................................195
5.3.1 Как работает кеш push .......................................................196
5.3.2 Отказ от push с помощью RST_STREAM .............................199
5.4 Условная push-загрузка .............................................................200
5.4.1 Отслеживание push на стороне сервера .............................200
5.4.2 Условные HTTP-запросы ......................................................201
5.4.3 Push-загрузка с помощью куки-файлов ...............................201
5.4.4 Дайджесты кеша ..................................................................202
5.5 К каким ресурсам применим HTTP/2 push............................204
5.5.1 К чему может быть применим push? ..................................204
5.5.2 К чему должен быть применим push? ..................................205
5.5.3 Автоматизация push-загрузки ..........................................206
5.6 Решение проблем HTTP/2 push ................................................207
5.7 Влияние HTTP/2 push на производительность .....................209
5.8 Push или предварительная загрузка? .....................................211
5.9 Другие варианты использования HTTP/2 push ....................214
Резюме .....................................................................................................217
Стр.10
10
Содержание
6
Оптимизация в HTTP/2 .............................................................218
6.1 Значение HTTP/2 для веб-разработчиков .............................219
6.2 Оптимизация HTTP/1.1 мешает HTTP/2? ..............................220
6.2.1 Запросы HTTP/2 по-прежнему затратны ...........................220
6.2.2 Возможности HTTP/2 не безграничны ................................224
6.2.3 Для больших ресурсов эффективнее сжатие .......................225
6.2.4 Ограничение пропускной способности и конкуренция
ресурсов ................................................................................227
6.3 Методы повышения веб-производительности все еще
6.2.5 Сегментирование данных ....................................................229
6.2.6 Встраивание ресурсов ..........................................................230
6.2.7 Заключение ...........................................................................230
актуальны для HTTP/2 ................................................................231
6.3.1 Уменьшение объема передаваемых данных ..........................232
6.3.2 Предотвращение повторной отправки данных
с помощью кеширования ......................................................239
6.3.3 Снижение нагрузки на сеть посредством
сервис-воркеров ....................................................................244
6.3.4 Не отправляйте то, что вам не нужно ..............................245
6.3.5 Подсказки для ресурсов HTTP ..............................................245
6.3.6 Сокращение задержки «последней мили» .............................248
6.3.7 Оптимизация HTTPS ...........................................................248
6.3.8 Методы повышения веб-производительности,
не связанные с HTTP .............................................................252
6.4 Оптимизация и для HTTP/1.1, и для HTTP/2 .........................252
6.4.1 Измерение трафика HTTP/2 ................................................252
6.4.2 Отслеживание поддержки HTTP/2 на стороне сервера ......254
6.4.3 Отслеживание поддержки HTTP/2 на стороне клиента ....257
6.4.4 Объединение соединений ......................................................258
6.4.5 Сколько времени занимает оптимизация
для пользователей HTTP/1.1 ................................................260
Резюме .....................................................................................................261
Часть III ПРОДВИНУТЫЙ УРОВЕНЬ
ИСПОЛЬЗОВАНИЯ HTTP/2 ......................................262
7
Расширенные возможности HTTP/2 ..................................263
7.1 Состояния HTTP/2-потока .........................................................264
7.2 Управление потоками информации .......................................268
7.2.1 Пример управления потоками информации .......................269
7.2.2 Настройка управления потоком информации
на сервере .............................................................................272
7.3 Приоритеты потоков ..................................................................273
7.3.1 Зависимости потоков .........................................................274
Стр.11
Содержание
11
7.3.2 Взвешивание потока ............................................................277
7.3.3 Почему приоритизация – это так сложно? ........................280
7.3.4 Приоритизация в веб-серверах и браузерах ........................280
7.4 Проверка совместимости с HTTP/2 .........................................285
7.4.1 Проверка совместимости сервера ......................................285
7.4.2 Проверка совместимости клиента .....................................287
8
Резюме .....................................................................................................287
Cжатие заголовков HPACK ......................................................289
8.1 Для чего нужно сжатие заголовков? .......................................289
8.2 Как работает сжатие ...................................................................291
8.2.1 Таблицы подстановки ..........................................................292
8.2.2 Более эффективные методы кодировки ..............................293
8.2.3 Ретроспективное сжатие ...................................................295
8.3 Сжатие HTTP-тел .........................................................................295
8.4 Сжатие заголовка HPACK для HTTP/2 .....................................297
8.4.1 Статическая таблица HPACK.............................................298
8.4.2 Динамическая таблица HPACK ............................................299
8.4.3 Типы заголовков HPACK .......................................................300
8.4.4 Таблица кодировки Хаффмана .............................................305
8.4.5 Скрипт кодирования по Хаффману .....................................306
8.4.6 Почему кодирование Хафманна подходит не во всех
случаях ..................................................................................308
8.5 Практические примеры сжатия HPACK..................................309
8.6 HPACK в реализациях клиента и сервера ..............................315
8.7 Ценность HPACK ..........................................................................316
Резюме .....................................................................................................317
Часть IV БУДУЩЕЕ HTTP ..................................................................318
TCP, QUIC и HTTP/3 ......................................................................319
9
9.1 HTTP и слабые стороны TCP .....................................................320
9.1.1 Задержка предустановки HTTP/2 ........................................321
9.1.2 Неэффективность системы контроля перегрузки в TCP ...323
9.1.3 Влияние слабых мест TCP на HTTP/2 ..................................331
9.1.4 Оптимизация TCP ................................................................336
9.1.5 Будущее TCP и HTTP .............................................................341
9.2 QUIC ................................................................................................342
9.2.1 Преимущества QUIC в производительности ......................344
9.2.2 Место QUIC в стеке Internet ................................................344
9.2.3 Что такое UDP и почему он является основой QUIC ..........345
9.2.4 Стандартизация QUIC ........................................................349
9.2.5 Различия между HTTP/2 и QUIC ...........................................351
9.2.6 Инструменты QUIC .............................................................354
Стр.12
12
Содержание
9.2.7 Реализации QUIC ..................................................................355
9.2.8 Стоит ли переходить на QUIC? ..........................................356
10
Резюме .....................................................................................................356
Дальнейшее развитие HTTP ....................................................358
10.1 Споры о HTTP/2 и его недостатках .........................................359
10.1.1 Споры о SPDY .......................................................................359
10.1.2 Проблемы конфиденциальности и состояния в HTTP ........361
10.1.3 HTTP и шифрование .............................................................366
10.1.4 Проблемы транспортного протокола ................................370
10.1.5 HTTP/2 слишком сложен ......................................................374
10.1.6 HTTP/2 – временная мера ....................................................375
10.2 HTTP/2 в реальном мире ...........................................................376
10.3 Будущие версии HTTP/2 и возможности HTTP/3
или HTTP/4 ....................................................................................378
10.3.1 QUIC – это HTTP/3? .............................................................378
10.3.2 Дальнейшее развитие двоичного протокола HTTP .............378
10.3.3 Развитие HTTP над транспортным уровнем .....................379
10.3.4 Какие расширения требуют создания новой версии
HTTP? ...................................................................................382
10.3.5 Как могут быть представлены будущие версии HTTP ........383
10.4 HTTP как базовый транспортный уровень ............................383
10.4.1 Использование семантики и сообщений HTTP
для доставки внутреннего трафика ...................................383
10.4.2 Использование концепции двоичного фрейминга HTTP/2....385
10.4.3 Использование HTTP для запуска другого протокола .........385
Резюме .....................................................................................................390
Приложение. Обновление популярных веб-серверов
до HTTP/2 ......................................................................................................391
A.1 Обновление вашего веб-сервера для поддержки
HTTP/2 ............................................................................................391
A.1.1 Apache ...................................................................................392
A.1.2 nginx ......................................................................................407
A.1.3 Microsoft Internet Information Services (IIS) ...........................416
A.1.4 Другие серверы .....................................................................417
A.2 Настройка HTTP/2 через обратный прокси-сервер .............418
A.2.1 Apache ...................................................................................418
A.2.2 nginx ......................................................................................419
Предметный указатель .......................................................................420
Стр.13