Как запросы ресурсов отображаются в потоки в HTTP / 2 - PullRequest
0 голосов
/ 19 февраля 2020

Я не смог найти этот RF C, и мне интересно, есть ли какие-либо правила относительно того, как запросы ресурсов от клиента HTTP / 2 отображаются в потоки HTTP / 2.

Является ли это одноразовым - один, где каждый поток представляет данные для одного запроса ресурса (например, изображения, js, html) или можно использовать один поток для передачи нескольких ресурсов?

Чем потоковые приоритеты отличаются от потоковых зависимостей (для меня оба напрямую влияют на окончательный порядок поиска ресурсов)? Существуют ли общие стратегии, как браузеры обрабатывают потоки и зависимости потоков?

Большое спасибо за помощь!

1 Ответ

0 голосов
/ 19 февраля 2020

Я не смог найти этот RF C, и мне интересно, есть ли какие-либо правила относительно того, как запросы ресурсов от клиента HTTP / 2 отображаются в потоки HTTP / 2.

Это так? один-к-одному, где каждый поток представляет данные для одного запроса ресурса (например, изображения, js, html) или можно использовать один поток для передачи нескольких ресурсов?

От HTTP / 2 RF C:

Мультиплексирование запросов достигается при наличии каждого обмена запросами / ответами HTTP, связанного с его собственным потоком (раздел 5).

, а также позже :

Идентификаторы потока нельзя использовать повторно.

Что касается ваших следующих вопросов:

Чем потоковые приоры отличаются от потоковых зависимостей (для меня оба напрямую влияют на конечный порядок поиска ресурсов)?

Они являются частью той же схемы приоритизации. Зависимости позволяют отправлять определенные ресурсы в предпочтение другим, тогда как взвешивание приоритетов позволяет отправлять ресурсы одновременно, но взвешивать для пропорционального распределения большей доступной полосы пропускания некоторым ресурсам.

Существуют ли какие-либо общие стратегии, как браузеры обрабатывают потоки и зависимости потоков?

Все они обрабатывают потоки одинаково, но зависимости обрабатываются совершенно по-разному.

  • Chrome часто использует зависимости и создает длинную цепочку для отдельных зависимостей, которые должны быть разрешены в порядке, где это возможно. Ресурсы с более высоким приоритетом добавляются далее по цепочке. Chrome не использует взвешивание a.

  • Safari делает обратное и отправляет все запросы без зависимостей, но с соответствующим взвешиванием.

  • Firefox создает сложное дерево зависимостей, используя как весовые коэффициенты, так и зависимости.

  • Old Edge не устанавливает приоритеты, поэтому использует HTTP / 2 по умолчанию одинаково взвешенных ресурсов без каких-либо зависимостей. New Edge основан на Chrome, поэтому из этого следует, что

Обычно считается, что Chrome обычно лучше, но страдает при загрузке ресурсов, которые лучше загружать параллельно (например, изображения - особенно прогрессивные JPEG). Firefox здесь лучше, но чуть менее оптимален для ресурсов, которые необходимо загрузить полностью (например, критические CSS и JS). Safari только хорошо и обычно хуже, чем оба. И старый Эдж был абсолютным худшим. Это хороший разговор о состоянии дел: https://m.youtube.com/watch?v=sgjxuhFQktE

Для HTTP / 3 они хотят изменить свою сложную модель. Хороший разговор об этом здесь: https://m.youtube.com/watch?v=nH4iRpFnf1c&feature=youtu.be

...