Подтвердить что ты не робот

Каковы недостатки использования HTTP-конвейеризации?

Сеанс WWDC 2012 706 - Рекомендации по работе в сети объясняет HTTP-конвейеризация.

  • По умолчанию отключено на iOS
  • В беседе он описал это как огромный выигрыш в производительности.

Почему вы не хотите его использовать?

pipelining

4b9b3361

Ответ 1

Ошибки реализации

Чтобы конвейерная обработка работала, ответы должны возвращаться в том порядке, в котором они были запрошены. Наивная реализация сервера может просто отправить ответ, как только он будет рассчитан. Если несколько запросов отправляются параллельно, и первый запрос занимает больше времени для обработки (например, обработка большего изображения), тогда ответы будут не в порядке.

Это проблема для клиента, поскольку HTTP - это протокол без состояния, клиент не имеет возможности сопоставлять запросы с ответами. Он зависит от того, как ответы вернулись.

Сервер ДОЛЖЕН отправить свои ответы на эти запросы в том же порядке, что и полученные запросы.

Проблемы с производительностью

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

  • В этой статье говорится о потере производительности при некоторых обстоятельствах и возможности атаки на отказ в обслуживании.

  • В этой статье также указывается, что конвейерная обработка не является массовой победой.

  • WWDC 2015 - Networking with NSURLSession объясняет, что глава блокировки строк очень хорошо работает. (Решением является переход на HTTP 2, который поддерживает приоритеты)

Глава блокировки строк

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

  • Некоторые серверы и большинство прокси-серверов не поддерживают его. (Возможно, из-за проблем безопасности/надежности/производительности)
  • Некоторые серверы поддерживают его неправильно, и это может привести к ошибкам клиента.
  • Это не обязательно победа в производительности.
  • Восприимчивость к блокировке строки