HTTP / 2 потоковое и статическое сжатие - PullRequest
0 голосов
/ 23 июня 2018

Мне нужно реализовать сервер http2, как на узле, так и на C ++. Во всяком случае, я не могу понять, как заставить потоковую передачу работать со статическим сжатием:

  • Я хочу сжать свои файлы с максимально возможным сжатием, и это делается статически во время сборки

  • Я хочу транслировать свой HTML, чтобы браузер получил <head> как можно скорее и мог либо предварительно извлечь ресурсы, либо извлечь их из локального кэша

Но сжатые файлы нельзя прочитать до получения всех данных, не так ли?

Должен ли я отказаться от сжатия или мне нужно отдельно сжимать фрагменты потока HTML? Есть ли лучший способ?

1 Ответ

0 голосов
/ 23 июня 2018

Но сжатые файлы невозможно прочитать до получения всех данных, не так ли?

Это (как правило) неверно.Сжатие на основе сжатия (например, gzip, brotli), используемое для файлов HTML, может быть распаковано без получения всех данных.

Они работают в основном с помощью обратных ссылок на данные.Например, в приведенном выше предложении есть повторяющаяся ссылка на текст «compress»:

Deflate based compress ion (например, gzip, brotli) может быть de compress редактируется без получения всех данных.

Таким образом, второй экземпляр можно заменить обратной ссылкой на первый:

Сжатие на основе сжатия (например, gzip, brotli)) можно удалить (-49,8) без получения всех данных.

Таким образом, вы можете видеть это, пока вы читаете по порядку (что гарантирует HTTP) и с самого начала, тогдавам не нужны никакие последующие данные для распаковки того, что вы уже получили, - но вам нужен любой предыдущий текст.

Аналогичным образом JPEG часто отображаются до того, как они полностью получены, либо загружая их построчно (не прогрессивные JPEG) или с размытым изображением, которое усиливается при загрузке большего количества данных (прогрессивные JPEG).

...