Shared Brotli

Shared Brotli это новый формат сжатия контента для HTTP.

Функциональность поддерживается в Chrome v130+ (выпущен 15 октября 2024)

Данное демо показывает, какой профит можно получить, если использовать Shared Brotli вместо обычного Brotli.


Примеры сжатия динамических страниц (HTML)

При клике на размер, открывается страница с соответствующим сжатием.

Запрос Размер Brotli Размер Shared Brotli * Размер SDCH ** Размер без сжатия

* Для сжатия страниц использовался словарь, который используется для сжатия SDCH в поиске.

** Для вычисления размера SDCH совершался отдельный запрос к поиску, в котором мог быть другой состав колдунщиков. Так же на поиске страницы сжимаются частями (pre-search, inter-search, post-search), а в примерах страницы сжимались целиком, что дает лучшую степень сжатия.

Как работает shared brotli:

  1. При первом заходе на страницу, сервер отдает браузеру заголовок
    Link: </dictionary>; rel="compression-dictionary"
    где /dictionary это адрес словаря.

    Изначально страница будет сжата через обычный brotli, т.к. у пользователя нет словаря.
  2. Браузер скачивает словарь по адресу /dictionary, при скачивании словаря сервер отдает заголовок
    Use-As-Dictionary: match="/pages/*"
    Это значит, что словарь нужно применять ко всем страницам, которые соответствуют маске /pages/*

    Скаченные словари можно посмотреть в chrome://net-internals/#sharedDictionary
  3. При следующих запросах, браузер будет отсылать заголовок
    Available-Dictionary: :hash:
    И в списке доступных кодировок появится dcb – Dictionary Compressed Brotli.
    Accept-Encoding: gzip, deflate, br, zstd, dcb, dcz
  4. Если на сервере и на клиенте есть одинаковые словари (совпали хеши), то сервер может закодировать ответ через shared brotli.

    Если ответ закодирован через shared brotli, то в ответе будут следующие заголовки:
    Content-Encoding: dcb
    Content-Dictionary: :hash:

Примеры сжатия статики (JS файлы)

Посмотреть, как сжатие работает в браузере можно по ссылкам: [Brotli]  |  [Shared Brotli]

* Дата относительно времени генерации демки.

** В качестве словаря использовались те же файлы недельной давности.


Исходный код примеров доступен в аркадии: junk/shlenskiy/shared-brotli-demo