14

Многие, если не все современные браузеры не используют конвейерные HTTP-запросы. Теоретически конвейерная обработка должна ускорять запросы, уменьшая количество времени туда и обратно, необходимое для получения веб-сайта.Почему в современных браузерах отключена конвейерная обработка?

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

Я видел некоторые проблемы с безопасностью, такие как DoS-атака уровня 7, если клиент максимально приближает количество конвейерных запросов к URL-адресу, интенсивному для сервера, игнорируя любые ответы, которые могут быть получены.

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

Однако он включен по умолчанию в браузерах Android и на мобильных устройствах Chrome.

Почему Chrome, Firefox, IE, Opera и Safari не используют конвейерные HTTP-запросы на своей настольной (а иногда и мобильной) версии? Какова их аргументация в том, чтобы отключить его?

+0

Я голосую, чтобы закрыть этот вопрос не по теме, потому что она не пытается решить практическую проблему , Это ** может быть лучше подходит [для программистов stackexchange] (http://programmers.stackexchange.com/help/on-topic). – Quentin

+0

Возможный дубликат [Каковы недостатки использования HTTP-конвейерной обработки?] (Http://stackoverflow.com/questions/14810890/what-are-the-disadvantages-of-using-http-pipelining) – Joe

+0

I ' до голосования. ** Я хочу знать ответ! ** – ieXcept

ответ

8

Pipelining отключена по следующим причинам:

  • Firefox:

Больший вопрос откровенно был главой линии блокировки и его влияние на производительность и надежность. Наивные трубопроводы просто ухудшают работу.

  • Chrome:

Опция, чтобы включить конвейерную был удален из Chrome, поскольку, как известно, некачественного или ошибки и известный фронт-оф-очереди блокировки вопросов. Существует также большое количество серверов и промежуточных ящиков, которые ведут себя плохо и непоследовательно, когда конвейерная обработка включена. До тех пор, пока они не будут разрешены, рекомендуется, чтобы никто не применял конвейерную обработку. Для этого в настоящее время требуется специальная сборка Chromium.

В общем:

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

Конвейерная обработка сложна для правильной реализации: размер передаваемого ресурса, эффективный RTT, который будет использоваться, а также эффективная пропускная способность, имеют прямую зависимость от улучшения, обеспечиваемого конвейером. Не зная об этом, важные сообщения могут задерживаться за несущественными. Понятие важности даже развивается во время макета страницы! Таким образом, конвейерная обработка HTTP приводит к незначительному улучшению только в большинстве случаев.

Конвейерная обработка подлежит HOL problem.

HTTP/2 предлагает альтернативу:

С HTTP/1.x, браузер имеет ограниченную способность использовать выше приоритета данных: протокол не поддерживает мультиплексирование, и нет никакого способа передавать приоритет запроса серверу. Вместо этого он должен полагаться на использование параллельных соединений, что позволяет ограничить параллелизм до шести запросов на источник. В результате запросы ставятся в очередь на клиенте до тех пор, пока не будет доступно соединение, что добавит ненужную задержку в сети. Теоретически, HTTP Pipelining попыталась частично решить эту проблему, но на практике она не получила поддержки.

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

Прокси можно также использовать:

Вы можете попробовать что-то я сделал, чтобы ускорить Konqueror в KDE3. Я был недоволен тем, что Konqueror не имел конвейерной обработки HTTP, поэтому после некоторого поиска я установил Polipo в качестве локального прокси HTTP/HTTPS/FTP и установил Konqueror для его использования (localhost на порту 8123, если я правильно помню). В дополнение к конвейерной обработке HTTP, Polipo также обеспечил улучшенное кэширование, и поскольку это был прокси-сервер, я мог бы установить для каждого браузера его использование, и кеширование будет совместно использоваться браузерами. (Это также означает, что рекомендуется отключить независимое кэширование каждого браузера.)

Список литературы

+0

Теперь я хочу знать, почему мобильные браузеры, как правило, оставляют конвейерную обработку включенными! Они используют одни и те же прокси-серверы, средние ящики и должны иметь одну и ту же проблему HoL (но еще хуже, поскольку она использует соединение с более высокой задержкой). HTTP/2 - это, конечно, будущее решение, но до тех пор. –

+0

Есть ли мобильный браузер, который документирует это различие?Я посмотрел, но не нашел ни одного, кроме Opera Mini, который использует свой собственный прокси-сервер, и ни один из них не документирует различия между мобильными и настольными компьютерами в отношении конвейерной обработки или соответствия HTTP. –

+0

Отличный ответ! FWIW, https://bugzilla.mozilla.org/show_bug.cgi?id=264354#c65 кратко затрагивает различия между мобильными и настольными компьютерами. –

Смежные вопросы