Кіріспе

HTTP құбырлары – HTTP/1.1 мүмкіндігі, бірнеше HTTP сұраныстарын тиісті жауаптарды күтпей, бір TCP қосылысы арқылы жіберуге мүмкіндік береді. HTTP/1.1 серверлері құбырланған сұраныстарға дұрыс жауап беруді талап етеді, тіпті сервер HTTP құбырларын қолдамаса да, құбырланбаған, бірақ жарамды жауаптар беруі керек. Осы талапқа қарамастан, көптеген ескі HTTP/1.1 серверлері құбырлауды дұрыс қолдамайды, нәтижесінде көптеген HTTP клиенттері HTTP құбырларын пайдаланбайды. Бұл техника HTTP/2 арқылы мультиплекстеумен алмастырылды, ол көптеген қазіргі браузерлерде қолдауға ие. HTTP/3-де мультиплекстеу TCP-ні алмастыратын QUIC арқылы іске асырылады. Бұл жүктелу уақытын одан әрі қысқартады, себебі кейбір пакеттер жоғалған жағдайда да бастапқы пакеттердің кешігуі болмайды.

Мотивация және шектеулер

Сұрауларды құбырландыру HTML беттерін жүктеу уақытын, әсіресе спутниктік интернет қосылыстары сияқты жоғары жайылмалы байланыстар арқылы айтарлықтай жақсартады. Жылдамдық артуы кеңжолақты қосылымдарда оқшаулаулырақ байқалады, себебі HTTP 1.1 шектеулері күшінде қалады: сервер жауаптарды сұраулар түскен ретпен жіберуі керек, сондықтан қосылым толығымен «бірінші келген – бірінші қызмет көрсетілген» принципі бойынша жұмыс істейді. 2017 жылға қарай көптеген браузерлер HTTP/2-ні әдепкі бойынша қолдады, ол мультиплекстеуді пайдаланады. GET және HEAD сияқты деректерді алуға бағытталған сұрауларды әрқашан құбырландыруға болады. PUT және DELETE сияқты басқа да идемпотентті сұраулар тізбегі құбырландырылуы немесе құбырландырылмауы тізбектегі сұраулардың нәтижелері бір-біріне байланысты болуына байланысты. Құбырландырумен байланысты көптеген мәселелер HTTP аралық түйіндерінде (hop-by-hop), яғни прокси-серверлерде, әсіресе ашық прокси-серверлерде туындайды (егер HTTP тізбегіндегі олардың бірі құбырландырылған сұрауларды дұрыс өңдемесе, ештеңе қалыпты жұмыс істемейді). HTTP/2 мультиплекстелген ағындарында да осындай артықшылықтар бар.

Орындалу жағдайы

HTTP/1.1 нұсқасында құбырлау енгізілді, ал HTTP/1.0 нұсқасында болған жоқ. Құбырланған сұраныстарды/жауаптарды пайдаланғанда браузерлер, прокси-серверлер және т.б. жақсы жұмыс істемейтіні туралы шағымдар әрқашан болды. Соның салдарынан, көптеген жылдар бойы (кем дегенде 2011 жылға дейін) бағдарламалық жасақтаманы әзірлеушілер, инженерлер, веб-сарапшылар және т.б. байқаған әртүрлі мәселелерді жинақтап, оларды түзетуге және ашық Интернетте құбырлаумен қалай жұмыс істеуге қатысты кеңес беруге тырысты.

Веб-браузерлерде іске асыру

Барлық негізгі браузерлердің ішінде тек Opera ғана әдепкі бойынша қосылған, толыққанды жұмыс істейтін нұсқаға ие болды. Басқа браузерлерде HTTP құбыржолдары өшірілген немесе іске асырылмаған. Internet Explorer 11 құбыржолдарды қолдамайды. Mozilla браузерлері (мысалы, Mozilla Firefox, SeaMonkey және Camino) бұрын құбыржолдарды қолдаған, бірақ Firefox 54 нұсқасында олар алынып тасталды. Қолдау көрсетілген кезде, құбыржол дұрыс жұмыс істемейтін серверлермен байланысты мәселелерді болдырмау үшін әдепкі бойынша өшірілген. Егер құбыржол пайдаланушы қосса, Mozilla браузерлері кейбір эвристикалық әдістерді қолданды, көбінесе ескі Microsoft IIS серверлері үшін құбыржолды өшіру мақсатында. Алып тастау SeaMonkey-ге кері енгізілді. Konqueror 2.0 құбыржолдарды қолдайды, бірақ ол әдепкі бойынша өшірілген. Google Chrome бұрын құбыржолдарды қолдаған, бірақ ол қателер мен нашар жұмыс істейтін серверлермен байланысты проблемаларға байланысты өшірілді. Pale Moon (веб-браузер) құбыржолдарды қолдайды және әдепкі бойынша қосылған.

Веб прокси серверлерде іске асыру

HTTP прокси-серверлерінің көпшілігі шығатын сұраныстарды тізбектемейді. Кейбір HTTP проксилері, оның ішінде ашық HTTP проксилері, тізбектелген сұраныстарды өте нашар басқаруы мүмкін (мысалы, тізбектелген жауаптардың ретін шатастыру арқылы). Squid веб прокси-серверінің кейбір нұсқалары екі шығатын сұранысқа дейін тізбектей алады. Бұл мүмкіндік әдепкі бойынша өшірілген және "жолақтың енін басқару және қол жеткізуді тіркеу мақсатымен" қолмен қосуды қажет етеді. Squid клиенттерден келетін бірнеше сұранысты қолдайды. Polipo проксисі шығатын сұраныстарды тізбектейді. Tempesta FW, ашық кодты қолданба жеткізу контроллері, сондай-ақ артқы серверлерге сұраныстарды тізбектейді.