Jump to content

HTTP-конвейерная обработка

Временная диаграмма неконвейерного и конвейерного соединения

Конвейерная обработка HTTP — это функция HTTP/1.1 несколько HTTP- , которая позволяет отправлять запросов через одно TCP -соединение, не дожидаясь соответствующих ответов. [1] HTTP/1.1 требует, чтобы серверы правильно отвечали на конвейерные запросы, предоставляя неконвейерные, но действительные ответы, даже если сервер не поддерживает конвейерную обработку HTTP. Несмотря на это требование, многие устаревшие серверы HTTP/1.1 не поддерживают конвейерную обработку должным образом, что вынуждает большинство HTTP-клиентов не использовать конвейерную обработку HTTP.

На смену этому методу пришло мультиплексирование через HTTP/2 . [2] который поддерживается большинством современных браузеров . [3]

В HTTP/3 мультиплексирование осуществляется через QUIC , который заменяет TCP . не происходит, Это еще больше сокращает время загрузки, поскольку блокировка начала строки даже если некоторые пакеты потеряны.

Мотивация и ограничения

[ редактировать ]

Конвейерная обработка запросов приводит к значительному улучшению [4] во время загрузки HTML-страниц, особенно при соединениях с высокой задержкой, таких как спутниковое подключение к Интернету . Ускорение менее заметно при широкополосных соединениях, поскольку ограничение HTTP 1.1 все еще действует: сервер должен отправлять свои ответы в том же порядке, в котором были получены запросы, поэтому все соединение остается в порядке очереди. [1] и блокировка HOL может произойти .

асинхронные операции HTTP/2 и SPDY . Решением этой проблемы являются [5] К 2017 году большинство браузеров по умолчанию поддерживали HTTP/2, вместо которого используется мультиплексирование. [2]

Неидемпотентные запросы , такие как POST не должно быть конвейерным. [6] Читать запросы типа GET и HEAD всегда можно конвейеризировать. Последовательность других идемпотентных запросов, таких как PUT и DELETE могут быть конвейерными или нет в зависимости от того, зависят ли запросы в последовательности от влияния других. [1]

Конвейерная обработка HTTP требует, чтобы ее поддерживали как клиент, так и сервер. Серверы, соответствующие HTTP/1.1, обязаны выдавать действительные ответы на конвейерные запросы, но на самом деле не могут обрабатывать запросы одновременно. [7]

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

Использование конвейерной обработки с прокси-серверами HTTP обычно не рекомендуется еще и потому, что проблема блокировки HOL может сильно замедлить ответы прокси-сервера (поскольку ответы сервера должны быть в том же порядке, что и полученные запросы). [1] [9]

Пример : если клиент отправляет 4 конвейерных запроса GET прокси-серверу через одно соединение, и первого из них нет в его кеше, то прокси-сервер должен переслать этот запрос на целевой веб-сервер; если вместо этого в его кеше обнаружены следующие три запроса, прокси-сервер должен дождаться ответа веб-сервера, затем отправить его клиенту и только после этого он может отправить также три кэшированных ответа.

Если вместо этого клиент открывает 4 соединения с прокси-сервером и отправляет 1 запрос GET на каждое соединение (без использования конвейерной обработки), прокси-сервер может отправить три кэшированных ответа клиенту параллельно до того, как будет получен ответ от сервера, уменьшая общее время завершения (поскольку запросы обслуживаются параллельно, без проблем с блокировкой начала линии). [10] То же преимущество существует в мультиплексированных потоках HTTP/2.

Статус реализации

[ редактировать ]

Конвейерная обработка была представлена ​​в HTTP/1.1 и отсутствовала в HTTP/1.0. [11]

Всегда были жалобы на то, что браузеры, прокси-серверы и т. д. плохо работают при использовании конвейерных запросов/ответов, вплоть до того, что на протяжении многих лет (по крайней мере, до 2011 г.) разработчики программного обеспечения, инженеры, веб-эксперты и т. д. пытались обобщить отмечали различные проблемы, исправляли проблемы и давали советы о том, как бороться с конвейерной обработкой в ​​открытой сети. [8]

Реализация в веб-браузерах

[ редактировать ]

Из всех основных браузеров только Opera имела полностью работающую реализацию, включенную по умолчанию. В других браузерах конвейерная обработка HTTP была отключена или не реализована. [5]

  • Internet Explorer 8 не поддерживает запросы конвейера из-за опасений, связанных с ошибками прокси-серверов и блокировкой начала строки . [9]
  • Internet Explorer 11 не поддерживает конвейерную обработку. [12]
  • Браузеры Mozilla (такие как Mozilla Firefox , SeaMonkey и Camino ), используемые для поддержки конвейерной обработки; однако он был удален в Firefox 54. [13] Когда эта возможность поддерживалась, конвейерная обработка была отключена по умолчанию, чтобы избежать проблем с некорректным поведением серверов. [14] Если конвейерная обработка была включена пользователем, браузеры Mozilla использовали некоторую эвристику, в основном для отключения конвейерной обработки для старых серверов Microsoft IIS . [15] В конечном итоге удаление было перенесено в SeaMonkey.
  • Konqueror 2.0 поддерживает конвейерную обработку, но по умолчанию она отключена. [16]
  • Google Chrome ранее поддерживал конвейерную обработку, но был отключен из-за ошибок и проблем с плохо работающими серверами. [17]
  • Pale Moon (веб-браузер) поддерживает конвейерную обработку и включен по умолчанию. [18]

Реализация на веб-прокси-серверах

[ редактировать ]

Большинство HTTP-прокси не обрабатывают исходящие запросы. [19]

Некоторые HTTP-прокси, включая прозрачные HTTP-прокси, могут очень плохо управлять конвейерными запросами (например, смешивая порядок конвейерных ответов). [20]

Некоторые версии веб-прокси Squid могут передавать до двух исходящих запросов. Эта функция отключена по умолчанию, и ее необходимо включить вручную по «причинам управления пропускной способностью и регистрации доступа». [21] Squid поддерживает несколько запросов от клиентов.

Прокси -сервер Polipo передает исходящие запросы по конвейеру. [22]

Tempesta FW, контроллер доставки приложений с открытым исходным кодом , [23] также передает запросы на внутренние серверы. [24]

Другие реализации

[ редактировать ]

Библиотека libwww, созданная Консорциумом World Wide Web (W3C), поддерживает конвейерную обработку, начиная с версии 5.1, выпущенной 18 февраля 1997 года. [25]

Другие библиотеки разработки приложений, поддерживающие конвейерную обработку HTTP, включают:

  • Модулями Perl, обеспечивающими клиентскую поддержку конвейерной обработки HTTP, являются HTTP::Async и библиотека LWPng ( libwww-perl New Generation). [26]
  • Microsoft .NET Framework 3.5 поддерживает конвейерную обработку HTTP в модуле. System.Net.HttpWebRequest. [27]
  • Qt Класс QNetworkRequest, введенный в 4.4. [28]

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

Инструменты тестирования, поддерживающие конвейерную обработку HTTP, включают:

См. также

[ редактировать ]
  1. ^ Jump up to: а б с д Филдинг, Р.; Решке, Дж. (2014). Филдинг, Р.; Решке, Дж. (ред.). «Протокол передачи гипертекста (HTTP/1.1): синтаксис и маршрутизация сообщений: конвейерная обработка» . ietf.org. дои : 10.17487/RFC7230 . Проверено 24 июля 2014 г. {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  2. ^ Jump up to: а б «Редакция 1330814 | Управление соединениями в HTTP/1.x | MDN» . Веб-документы MDN . Архивировано из оригинала 19 марта 2018 г. Проверено 19 марта 2018 г.
  3. ^ «Поддержка браузера HTTP2» . Проверено 9 марта 2017 г.
  4. ^ Нильсен, Хенрик Фристик ; Геттис, Джим ; Бэрд-Смит, Ансельм; Прюдоммо, Эрик; Ложь, Хокон Виум ; Лилли, Крис (24 июня 1997 г.). «Влияние HTTP/1.1, CSS1 и PNG на производительность сети» . Консорциум Всемирной паутины . Проверено 14 января 2010 г.
  5. ^ Jump up to: а б Уиллис, Натан (18 ноября 2009 г.). «Уменьшение задержки HTTP с помощью SPDY» . LWN.net .
  6. ^ «Связи» . w3.org .
  7. ^ «Часто задаваемые вопросы по конвейерной работе HTTP/1.1 » .
  8. ^ Jump up to: а б Марк Ноттингем (14 марта 2011 г.). «Как сделать HTTP-конвейерную обработку доступной в открытой сети» . Проверено 16 октября 2021 г.
  9. ^ Jump up to: а б «Обратная ссылка «Чата экспертной зоны Windows Internet Explorer 8 (14 августа 2008 г.) » . Майкрософт . 14 августа 2008 года. Архивировано из оригинала 4 декабря 2010 года . Проверено 10 мая 2012 г.
  10. ^ Филдинг, Р.; Решке, Дж. (2014). Филдинг, Р.; Решке, Дж. (ред.). «Протокол передачи гипертекста (HTTP/1.1): синтаксис и маршрутизация сообщений: параллелизм» . ietf.org. дои : 10.17487/RFC7230 . Проверено 24 июля 2014 г. {{cite journal}}: Для цитирования журнала требуется |journal= ( помощь )
  11. ^ «Ключевые различия между HTTP/1.0 и HTTP/1.1» . Архивировано из оригинала 24 апреля 2016 г. Проверено 16 апреля 2016 г.
  12. ^ «Internet Explorer и ограничения на подключение» . IEBlog . Проверено 14 ноября 2016 г.
  13. ^ Примечания к выпуску Firefox 54
  14. ^ «Ошибка 264354: включить конвейерную обработку HTTP по умолчанию» . Мозилла . Проверено 16 сентября 2011 г.
  15. ^ «Исходный код — nsHttpConnection.cpp» . Исходный код Firefox . Мозилла. 7 мая 2010 года . Проверено 5 декабря 2010 г.
  16. ^ Эмир Ариан. Интернет-коммуникация: протоколы и связанные с ними предметы . Проверено 16 октября 2021 г.
  17. ^ Конвейерная обработка HTTP - Проекты Chromium
  18. ^ «Поддержка конвейерной обработки HTTP/1 удалена в Firefox 54 — форум Pale Moon» . forum.palemoon.org . Проверено 7 июня 2018 г.
  19. ^ Марк Ноттингем (20 июня 2007 г.). «Состояние кэширования прокси» . Проверено 16 мая 2009 г.
  20. ^ Марк Ноттингем (11 июля 2011 г.). «Что должны делать прокси» . Проверено 16 октября 2021 г.
  21. ^ «squid: директива конфигурации Pipeline_prefetch» . Кальмар . 9 ноября 2009 года . Проверено 1 декабря 2009 г.
  22. ^ «Polipo — кеширующий веб-прокси» . Юлиуш Хробочек. 18 сентября 2009 года . Проверено 12 ноября 2009 г.
  23. ^ «Tempesta FW — контроллер доставки приложений Linux» . Гитхаб . Проверено 29 марта 2018 г.
  24. ^ «Серверы: сторона Темпесты — tempesta-tech/tempesta Wiki» . Tempesta Technologies INC. 1 августа 2017 г. Проверено 29 марта 2018 г.
  25. ^ Кахан, Хосе (7 июня 2002 г.). «История изменений libwww» . Консорциум Всемирной паутины . Проверено 3 августа 2010 г.
  26. ^ «Использование HTTP::Async для параллельных HTTP-запросов (Колин Брэдфорд)» (PDF) . Архивировано из оригинала (PDF) 10 марта 2012 г. Проверено 3 августа 2010 г.
  27. ^ System.Net.HttpWebRequest и конвейерная обработка
  28. ^ Справочник классов QNetworkRequest. Архивировано 22 декабря 2009 г. на Wayback Machine , документация Nokia QT.
  29. ^ Конвейерная утилита HTTP GET
  30. ^ Объяснение конвейерной обработки Curl. Архивировано 27 июня 2012 г. на Wayback Machine , документация разработчика Curl.
  31. ^ Объявление об удалении конвейера Curl. Архивировано 5 февраля 2021 г. на Wayback Machine.
  32. ^ К. Майкл Пилато; Бен Коллинз-Сассман; Брайан В. Фицпатрик (2008). Контроль версий с помощью Subversion . О'Рейли Медиа . п. 238. ИСБН  978-0-596-51033-6 .
  33. ^ Джастин Р. Эренкранц (2007). «Подрывная деятельность: новые мощные игрушки» (PDF) .
  34. ^ «Сообщения HTTP/HTTPS» . Microsoft TechNet . 21 января 2005 г.
  35. ^ Как веб-поддержка CICS обеспечивает конвейерную обработку
  36. ^ «HTTP-сайт» . Архивировано из оригинала 8 июня 2012 г. Проверено 1 октября 2010 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: ce260f09d921eef1f9fd41ea2bb1db63__1720454340
URL1:https://arc.ask3.ru/arc/aa/ce/63/ce260f09d921eef1f9fd41ea2bb1db63.html
Заголовок, (Title) документа по адресу, URL1:
HTTP pipelining - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)