🤡 Тут анонимные источники подкинули закономерную претензию к моему посту про Benchmark сервера на Rust, ну типа вот - есть же HTTP/2 и вот может же сервер реализующий этот протокол отправлять файлы клиентской стороне до того момента, как браузер их запросит.
Приведу последовательность, для примерного понимания происходящих процессов. Обычная, "сильно-упрощенная" схема в классическом Http "из 90-ых", которая работает следующим образом:
Браузер запрашивает index.html ->
Сервер отправляет index.html ->
Браузер парсит разметку, строит DOM и определяет какие файлы нужно дополнительно догрузить ->
Браузер производит запрос на сервер по каждому файлу (или параллельно или последовательно) ->
Сервер последовательно или параллельно отправляет все запрошенные файлы ->
Браузер отображает страницу с учетом всех ресурсов.
Разница HTTP/2 в том, что серверная сторона может заранее определить, распарсив исходный HTML (или захардкодив их в конфиге) — какие файлы могут понадобиться клиенту и сразу же начать их отправку без дополнительных запросов с клиентской стороны.
Под файлами, там понятно — что угодно может быть, и JS и CSS и JPEG'и, вообще не суть.
Только вот проблема в том, что все эти процессы никакого отношения к бенчмарку не имеют - там, как правило, используется статичный Hello World на HTML размером в ~110 байт и без дополнительного контента в виде вышеупомянутых JPEG'ов.
Весь процесс клиент/серверного взаимодействия упрощается до примерно следующего вида:
Клиент запрашивает index.html ->
Сервер отправляет index.html ->
Более того, исходник faf открыт, это не rocket science, а элементарнейший веб сервер. Изучив код в течении 30-и секунд, сразу становится понятно, что там реализован стандартный HTTP/1.1 без выпендрежей.
И даже какой-нибудь хитровыебаный Pipelining конкретно в этом случае физику не обманет — запрос от клиента в любом случае должен произойти. Сервер не может слать ответ на опережение, ОСОБЕННО в случае использования мультиплексирования, как бы ты все клиентские сессии в единый поток не совал, это не так работает.
КАКИМ ОБРАЗОМ это вообще можно представить?
Типа, я как клиент, ОДИН РАЗ запросил страницу, а сервер по приколу решил мне заслать 10/100/1000 абсолютно одинаковых экземпляров страницы, предварительно запихнув их в один Stream? Вообще беды с башкой? 🤡
Post #339
12.2K