Конвейерная обработка HTTP - это метод, при котором несколько HTTP- запросов отправляются по одному TCP (протокол управления передачей) без ожидания соответствующих ответов. [1]
Техника была заменена мультиплексирование с помощью HTTP / 2 , [2] , который поддерживается большинством современных браузеров. [3]
По состоянию на 2018 год конвейерная обработка HTTP не включена по умолчанию в современных браузерах из-за нескольких проблем, включая ошибочные прокси-серверы и блокировку HOL . [2]
Мотивация и ограничения
Конвейерная обработка запросов приводит к значительному улучшению [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 / 1.1 и отсутствовала в HTTP / 1.0. [8]
Реализация на веб-серверах
Реализация конвейерной обработки на веб-серверах - это относительно простой вопрос, позволяющий убедиться, что сетевые буферы не сбрасываются между запросами. По этой причине большинство современных веб-серверов без проблем обрабатывают конвейерную обработку.
Реализация в веб-браузерах
Из всех основных браузеров только Opera, основанная на движке компоновки Presto, имела полностью работающую реализацию, которая была включена по умолчанию. Во всех остальных браузерах конвейерная обработка HTTP отключена или не реализована. [5]
- Internet Explorer 8 не выполняет конвейерные запросы из-за проблем с ошибками прокси и блокировкой заголовка . [9]
- Internet Explorer 11 не поддерживает конвейерную обработку. [10]
- Браузеры Mozilla (такие как Mozilla Firefox , SeaMonkey и Camino ) поддерживают конвейерную обработку; однако по умолчанию он отключен. [11] [12] Конвейерная обработка отключена по умолчанию, чтобы избежать проблем с неправильно работающими серверами. [13] Когда конвейерная обработка включена, браузеры Mozilla используют некоторые эвристические методы, особенно для отключения конвейерной обработки для старых серверов IIS . [14] Поддержка H1 Pipeline была удалена из Mozilla Firefox в версии 54. [15]
- Konqueror 2.0 поддерживает конвейерную обработку, но по умолчанию отключен. [ необходима цитата ]
- Google Chrome ранее поддерживал конвейерную обработку, но она была отключена из-за ошибок и проблем с плохо работающими серверами. [16]
- Pale Moon (веб-браузер) поддерживает конвейерную обработку и включен по умолчанию [17]
Реализация в веб-прокси
Большинство прокси-серверов HTTP не обрабатывают исходящие запросы. [18]
Некоторые версии веб-прокси Squid обрабатывают до двух исходящих запросов. Эта функция отключена по умолчанию, и ее необходимо включить вручную из соображений «управления полосой пропускания и регистрации доступа». [19] Squid поддерживает множественные запросы от клиентов.
В Polipo прокси трубопроводов исходящих запросов. [20]
Темпеста FW, открытым исходным кодом приложения контроллера доставки , [21] также трубопроводы запросы к серверам серверными. [22]
Другие реализации
Libwww библиотека сделано World Wide Web Consortium (W3C), поддерживает конвейерную обработку, начиная с версии 5.1 выпущен 18 февраля 1997 года [23]
Другие библиотеки разработки приложений, поддерживающие конвейерную обработку HTTP, включают:
- Модули Perl, обеспечивающие клиентскую поддержку конвейерной обработки HTTP, - это HTTP :: Async и библиотека LWPng ( libwww-perl New Generation). [24]
- Проект Apache Foundation HttpComponents обеспечивает поддержку конвейерной обработки в расширениях HttpCore NIO.
- Microsoft .NET Framework 3.5 поддерживает конвейерную обработку HTTP в модуле
System.Net.HttpWebRequest
. [25] - Класс Qt
QNetworkRequest
, представленный в 4.4. [26]
Некоторые другие приложения, в настоящее время использующие конвейерную обработку:
- Сервер приложений IceBreak начиная с BUILD389
- phttpget из FreeBSD (минималистичный конвейерный HTTP-клиент) [27]
- libcurl имеет ограниченную поддержку конвейерной обработки с использованием параметра CURLMOPT_PIPELINING. [28]
- portsnap ( система распределения дерева портов FreeBSD )
- Advanced Packaging Tool (APT) поддерживает конвейерную обработку. [ необходима цитата ]
- Subversion (SVN) имеет дополнительную поддержку конвейерной обработки HTTP с модулем доступа Serf WebDAV (модуль по умолчанию, neon не поддерживает конвейерную обработку). [29] [30]
- Очередь сообщений Microsoft в Windows Server 2003 по умолчанию использует конвейерную обработку по протоколу HTTP, и ее можно настроить для использования по протоколу HTTPS. [31]
- IBM CICS 3.1 поддерживает конвейерную обработку HTTP в своем клиенте. [32]
Multipart XHR - это реализация конвейерной обработки (без поддержки какого-либо браузера или веб-сервера), выполненная исключительно на JavaScript в сочетании со сценариями на стороне сервера. [ необходима цитата ]
Инструменты тестирования, поддерживающие конвейерную обработку HTTP, включают:
- httperf [33]
Смотрите также
- Постоянное соединение HTTP
- WebSocket
- SPDY
Рекомендации
- ^ a b c «Протокол передачи гипертекста (HTTP / 1.1): синтаксис сообщений и маршрутизация» . ietf.org . Проверено 24 июля 2014 . CS1 maint: обескураженный параметр ( ссылка )
- ^ а б в «Ревизия 1330814 | Управление подключением в HTTP / 1.x | MDN» . Веб-документы MDN . Проверено 19 марта 2018 .
- ^ «Поддержка браузера HTTP2» . Проверено 9 марта 2017 года . CS1 maint: обескураженный параметр ( ссылка )
- ^ Нильсен, Хенрик Фристик ; Геттис, Джим ; Бэрд-Смит, Ансельм; Прюдоммо, Эрик; Ли, Хокон Виум ; Лилли, Крис (24 июня 1997 г.). «Влияние HTTP / 1.1, CSS1 и PNG на производительность сети» . Консорциум World Wide Web . Проверено 14 января 2010 года . CS1 maint: обескураженный параметр ( ссылка )
- ^ а б Уиллис, Натан (18 ноября 2009 г.). «Уменьшение задержки HTTP с помощью SPDY» . LWN.net .
- ^ «Связи» . w3.org .
- ^ "HTTP / 1.1 Pipelining FAQ ' " .
- ^ «Архивная копия» . Архивировано из оригинала на 2016-04-24 . Проверено 16 апреля 2016 .CS1 maint: заархивированная копия как заголовок ( ссылка )
- ^ «Обратная ссылка« Чат экспертной зоны Windows Internet Explorer 8 (14 августа 2008 г.) » » . Microsoft . 14 августа, 2008. Архивировано из оригинала 4 декабря 2010 года . Проверено 10 мая 2012 года . CS1 maint: обескураженный параметр ( ссылка )
- ^ «Internet Explorer и ограничения на подключение» . IEBlog . Проверено 14 ноября 2016 .
- ^ Конвейерная сеть MozillaZine
- ^ Чеа Чу Йоу. Секреты Firefox . п. 180 . ISBN 0-9752402-4-2.
- ^ «Ошибка 264354: включить конвейерную обработку HTTP по умолчанию» . Mozilla . Проверено 16 сентября 2011 года . CS1 maint: обескураженный параметр ( ссылка )
- ^ «Исходный код - nsHttpConnection.cpp» . Исходный код Firefox . Mozilla. 7 мая 2010 . Проверено 5 декабря 2010 года . CS1 maint: обескураженный параметр ( ссылка )
- ^ «Ошибка 1340655: удаление поддержки конвейера H1» . Mozilla . Проверено 22 марта 2017 года . CS1 maint: обескураженный параметр ( ссылка )
- ^ Конвейерная обработка HTTP - Проекты Chromium
- ^ «Поддержка конвейера HTTP / 1 была удалена в Firefox 54 - форуме Pale Moon» . forum.palemoon.org . Проверено 7 июня 2018 .
- ^ Марк Ноттингем (20 июня 2007 г.). «Состояние кеширования прокси» . Проверено 16 мая 2009 года . CS1 maint: обескураженный параметр ( ссылка )
- ^ "squid: pipeline_prefetch конфигурационная директива" . Кальмар . 9 ноября 2009 . Проверено 1 декабря 2009 года . CS1 maint: обескураженный параметр ( ссылка )
- ^ «Polipo - кеширующий веб-прокси» . Юлиуш Хробочек. 18 сентября 2009 . Проверено 12 ноября 2009 года . CS1 maint: обескураженный параметр ( ссылка )
- ^ «Tempesta FW - контроллер доставки приложений Linux» . GitHub . Проверено 29 марта 2018 года . CS1 maint: обескураженный параметр ( ссылка )
- ^ «Серверы: сторона Темпесты - tempesta-tech / tempesta Wiki» . Tempesta Technologies INC. 1 августа 2017 года . Проверено 29 марта 2018 года . CS1 maint: обескураженный параметр ( ссылка )
- ^ Кахан, Хосе (7 июня 2002 г.). "История изменений libwww" . Консорциум World Wide Web . Проверено 3 августа 2010 года . CS1 maint: обескураженный параметр ( ссылка )
- ^ «Использование HTTP :: Async для параллельных HTTP-запросов (Колин Брэдфорд)» (PDF) . Архивировано из оригинального (PDF) 10 марта 2012 года . Проверено 3 августа 2010 .
- ^ System.Net.HttpWebRequest и конвейерная обработка
- ^ QNetworkRequest Class Reference архивации 2009-12-22 в Wayback Machine , Nokia QT документации
- ^ Конвейерная утилита HTTP GET
- ^ Объяснение конвейерной обработки Curl. Архивировано 27 июня 2012 г.на Wayback Machine , документация разработчика Curl.
- ^ К. Майкл Пилато; Бен Коллинз-Сассман; Брайан В. Фицпатрик (2008). Контроль версий с помощью Subversion . O'Reilly Media . п. 238. ISBN 0-596-51033-0.
- ^ Джастин Р. Эренкранц (2007). «Subversion: новые мощные игрушки» (PDF) .
- ^ «Сообщения HTTP / HTTPS» . Microsoft TechNet . 21 января 2005 г.
- ^ Как поддержка CICS Web обрабатывает конвейерную обработку
- ^ «HTTP-сайт» . Архивировано из оригинала на 2012-06-08 . Проверено 1 октября 2010 .
Внешние ссылки
- RFC 7230 «Протокол передачи гипертекста (HTTP / 1.1): синтаксис сообщений и маршрутизация» . ietf.org . Проверено 24 июля 2014 . CS1 maint: обескураженный параметр ( ссылка )
- Часто задаваемые вопросы по конвейеризации HTTP / 1.1 на mozilla.org
- «Влияние HTTP / 1.1, CSS1 и PNG на производительность сети» на w3.org
- Статья «Оптимизация времени загрузки страницы»
- phttpget
- библиотека serf C