2

Кто-нибудь еще испытывал эту проблему с HTTP/2 на IIS10. У меня установлена виртуальная машина в Azure с веб-сайтом на IIS10. Я установил SSL и т.д. И проверил сайт на HTTP/2, отключил SSL и протестировал его в том же браузере с HTTP/1.1. Результат был неожиданным, HTTP/1.1 превзошел HTTP/2 BIG TIME!

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

Результаты HTTP/2:HTTP/2 Время загрузки

HTTP/1.1 результаты:

Как вы можете видеть, HTTP/1.1 превосходит HTTP/2, и мне кажется, что серверу требуется необычайно много времени для ответа на запросы (зеленый - время до первого байта).

Есть идеи?

1 ответ1

2

Разница в том, как HTTP/1 и HTTP/2 настраивают сокеты для работы в сети.

В HTTP/1 браузер делает запрос на один актив, а затем ожидает загрузки этого актива, прежде чем сделать следующий запрос. Это очень медленно, поэтому, чтобы обойти это, браузеры начали мультиплексировать свои запросы и делать 6-8 запросов одновременно, разделяя полосу пропускания между этими 6-8 запросами.

В HTTP/2 браузер открывает один сокет, выполняет все запросы и затем ожидает потоковой передачи всех ресурсов с максимально возможной пропускной способностью.

Причина, по которой вы должны увидеть высокий TTFB, заключается в том, что в HTTP/1 каждый запрос является отдельным сокетом, а в HTTP/2 все запросы загружаются через один поток. Возможно, вы сделали запросы, но вам нужно дождаться ответа сервера со всеми запрошенными вами данными.

Теоретически HTTP/2 должен быть быстрее, потому что он более эффективен - у вас нет лишних затрат на открытие нового сокета для каждого запроса. Вы передаете все данные по одному каналу данных и можете назначать приоритеты запросам в зависимости от того, как должна загружаться страница.

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

Кроме того, поскольку вы заявили, что используете незашифрованный HTTP/1 и зашифрованный HTTP/2, шифрование вызовет дополнительные издержки и потерю производительности. Вы можете попробовать сделать зашифрованный HTTP/1 для лучшего сравнения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .