Галоўная > Гісторыя развіцця HTTP

Гісторыя развіцця HTTP

http
network

Ці ведаеце вы пра розніцу паміж рознымі версіямі пратакола HTTP?

Калі сумняваецеся ў адказе, - давайце разбірацца!

HTTP (HyperText Transfer Protocol) - гэта пратакол для перадачы даных, які служыць асновай Сусветнага павуціння (World Wide Web).

HTTP - пратакол прыкладнога ўзроўню, які выкарыстоўвае магчымасці пратаколаў TCP/IP.

HTTP/0.9

Быў створаны ў 1991 годзе і першапачаткова не меў звязанага з ім нумара версіі. Пазней, каб адрозніваць ад іншых будучых версій, ён быў названы версіяй 0.9 (HTTP/0.9). Спачатку ствараўся для перадачы гіпертэксту (тэкст са спасылкамі), а пазней і для адвольных даных.

Пратакол атрымаўся просты, з ім можна было працаваць як з графічнага браўзера (WorldWideWeb), так і з тэкставага (Line Mode).

Цікавостка! А вось так выглядаў першы сайт, створаны Цімам Бернарсам-Лі!

Запыт ўяўляе сабой запіс у адзін радок GET-запыт і шлях да дакумента. Завяршыць запыт трэба было зваротам карэткі (CRLF). Не перадаваўся ні сервер, ні пратакол, ні порт. Сервер вяртае гіпертэкст, перададзены ASCII-знакамі. Пасля гэтага злучэнне закрываецца.

// Request

$telnet GET /index.html
// Response

<html>First page</html>

Асаблівасці HTTP/0.9:

  • Кліент-серверны пратакол прыкладнога ўзроўню
  • Разумеў толькі ASCII-знакі
  • Працаваў паверх стэка пратаколаў TCP/IP
  • Злучэнне пасля запыта / водкліка зачыняецца
  • Порт, сервер і пратакол не перадаваліся.

Чаго яшчэ не было:

  • яшчэ не было магчымасці выкарыстоўваць іншыя HTTP-метады акрамя GET
  • не існавала загалоўкаў
  • не існавала статус-кодаў. Для паведамлення аб праблеме ствараўся асобны HTML, які мог паведаміць карыстальнікам аб праблеме.
  • не магчыма было працаваць з рознымі тыпамі файлаў
  • не дазваляў атрымаць доступ праз proxy
  • не было headers ў HTML-дакуменце. Толькі сам HTML.

HTTP/0.9

HTTP/1.0

1991 - 1995 гады азначаюцца буйным развіццём HTML, новага пакалення праграм, вядомых як "веб-браўзеры", з'яўленнем і хуткім ростам агульнадаступнай інтэрнэт-інфраструктуры. Патрэбны быў пратакол, які дазваляў не толькі перадаваць гіпертэкставы дакумент, але і прадастаўляць больш пашыраныя метаданыя аб запыце і адказе, дазваляць узгадненне кантэнту, перадаваць іншыя тыпы файлаў і гэтак далей. У адказ на гэта была створана вялікая колькасць эксперыментальных HTTP-сервераў і кліенцкіх рэалізацый.

У траўні 1996 года працоўная група HTTP (HTTP-WG) апублікавала RFC 1945, у якім было задакументавана «агульнае выкарыстанне» многіх рэалізацый HTTP/1.0, якія сустракаліся. Гэта быў толькі інфармацыйны RFC. Таму HTTP/1.0 не з'яўляўся афіцыйнай спецыфікацыяй або інтэрнэт-стандартам.

// Request
GET /index.html HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)

// Response 1
200 OK
Date: Sun, 01 Jan 1995 12:01:00 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/html

<html>
Welcome to the <img src="/logo.gif"> example.ai homepage!
</html>

// Request 2
GET /logo.gif HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)

//Response 2
200 OK
Date: Sun, 01 Jan 1995 12:01:01 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/gif

<Encoded data of logo.gif>

Асаблівасці HTTP/1.0:

  • Падтрымлівае ужо некалькі метадаў запыту: GET, HEAD і POST. Цікава адзначыць, што POST быў уведзены для адпраўкі паведамлення ад сервера да кліента, у той час як раней сувязь была па сутнасці аднабаковай.
  • З'явіліся новыя тэрміны: user agent, proxy, gateway, cache, resource, client, server.
  • Інфармацыя аб версіі HTTP-пратакола адпраўлялаецца ў кожным запыце.
  • Замест адпраўкі адмысловага файла з памылкай з'являюцца статусы адказу, якія адлюстроўваюць поспех ці няўдачу, пакідаючы больш магчымасцяў для апрацоўкі адказу браўзеру.
  • Загалоўкі могуць складацца з некалькіх радкоў. Для іх выкарыстоўвалася кадзіроўка ASCII. З загалоўкамі дадалася магчымасць для кадзіравання, кэшавання, аўтарызацыі, выкарыстоўвання proxy і інш.
  • Адказ можа змяшчаць не толькі гіпертэкст.
  • Злучэнне паміж серверам і кліентам зачыняецца пасля кожнага запыту.

То бок, HTTP з пратакола для перадачы гіпертэксту пераўтварыўся ў пратакол для перадачы гіпермедыа, але назва засталася папярэдняй.

Аднак, HTTP/1.0 не з'яўляецца афіцыйным стандартам.

HTTP/1.1

Праца па пераўтварэнні пратакола HTTP у афіцыйны web-стандарт ішла на працягу прыкладна 4 гадоў з 1995 па 1999 гады.

Першы афіцыйны стандарт быў выпушчаны ў студзені 1997 года. Гэта прыкладна праз паўгода пасля з'яўлення HTTP/1.0.

Праз 2.5 гады, у чэрвені 1999 года ў стандарт быў дададзены шэраг паляпшэнняў і ўдакладненняў. Наступны шэраг паляпшэнняў быў дададзены ў червені 2014 года.

Стандарт HTTP/1.1 вырашыў шмат неадназначнасцей пратаколу, выяўленых у больш ранніх версіях, і ўвёў шэраг крытычна важных аптымізацый: злучэнні для падтрымання актыўнасці, перадачы кадзіравання з фрагментамі, запыты дыяпазону байтаў, дадатковыя механізмы кэшавання, кадзіроўкі перадачы і канвеерную перадачу запытаў.

// Initial request
GET /index.html HTTP/1.1
Host: www.example.ai
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1)
Accept: text/html
Accept-Language: en-US, en; q=0.5
Accept-Encoding: gzip, deflate

// Response
200 OK
Server: Apache
Date: Thu, 01 Jan 1998 12:01:00 GMT
Connection: Keep-Alive
Keep-Alive: timeout=5, max=500
Content-Encoding: gzip
Content-Type: text/html; charset=UTF-8
Last-Modified: Mon, 29 Dec 1997 12:15:00 GMT
Transfer-Encoding: chunked

<html>
Welcome to the <img src=/logo.gif”> example.ai homepage!
</html>

// Second request (same connection)
GET /logo.gif HTTP/1.1
Host: www.example.ai
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1)
Accept: */ *
Accept-Language: en-US, en; q=0.5
Accept-Encoding: gzip, deflate

// Response
200 OK
Age: 8450220
Cache-Control: public, max-age=315360000
Connection: Keep-Alive
Content-Type: image/gif
Content-Length: 5000
Date: Thu, 01 Jan 1998 12:01:01 GMT
Last-Modified: Sun, 01 Jan 1995 12:01:00 GMT
Server: Apache

<The binary data for a 5K GIF image is included in the message body>

Асаблівасці HTTP/1.1:

  • Пасля выконвання запыту TCP-злучэнне магло заставацца адкрытым і выкарыстоўвацца для наступных запытаў. Напрыклад, калі ў HTML-файле патрабаваліся выявы, то злучэнне не адчыняецца зноў, а выкарыстоўваецца папярэдняе.
  • Падтрымка віртуальных хастоў, якія дазваляюць серверам абслугоўваць некалькі даменаў на адным IP-адрасе.
  • На момант публікацыі першай версіі стандарту ўжо падтрымліваліся метады GET, POST, PUT, DELETE, HEAD, OPTIONS, TRACE. Крыху пазней дадаліся PATCH і CONNECT.
  • З'явіліся дадатковыя магчымасці кіраваннем кэшавання, падтрымкі розных моў, тыпаў файлаў, якія робяць магчымымі ўзгадненні паміж кліентам і серверам аб асаблівасцях і перавагах адказу.
  • Падтрымка частковых запытаў
  • Запыты дыяпазону байтаў

У 1994 годзе з'явілася пашырэнне HTTPS, якое выкарыстоўвала дадатковы слой для шыфравання - SSL (пазней змяніўся на TSL).

HTTP/2.0

Пад цяжарам уласнага поспеху і па меры таго, як мы ўсё больш працягваем пераносіць наша штодзённае ўзаемадзеянне ў Інтэрнет - сацыяльныя сеткі, электронную пошту, навіны і відэа, і ўсё часцей усю асабістую і працоўную прастору - HTTP-пратакол таксама пачаў выяўляць прыкметы стрэсу. Карыстальнікі і вэб-распрацоўшчыкі цяпер патрабуюць ад HTTP/1.1 хуткасці рэагавання амаль у рэжыме рэальнага часу і прадукцыйнасці пратакола, чаго ён проста не можа выканаць без некаторых мадыфікацый.

11 лютага 2015 года былі апублікаваныя фінальныя версіі чарнавіка версіі пратакола. У адрозненне ад папярэдніх версій, пратакол HTTP/2 з'яўляецца бінарным. Асноўная мэта HTTP/2 заключалася ў памяншэнні затрымкі шляхам уключэння поўнага мультыплексавання запытаў і адказаў, мінімізацыі накладных выдаткаў на пратакол за кошт эфектыўнага сціску палёў загалоўкаў HTTP і дадання падтрымкі прыярытэтаў запытаў і адпраўкі на сервер. Гэта прывяло да стварэння новага бінарнага пласта фармату дадзеных, які не мае зваротнай сумяшчальнасці з HTTP/1.x серверамі і кліентамі.

Важна адзначыць, што ні адна з семантыкі пратаколу высокага ўзроўню не закранаецца: усе HTTP-загалоўкі, метады HTTP, коды стану, URI і выпадкі выкарыстоўвання аднолькавыя. Замест гэтага HTTP/2 змяняе тое, як даныя фарматуюцца (афармляюцца ў кадры) і перадаюцца паміж кліентам і серверам, абодвы з якіх кіруюць усім працэсам, і хаваюць усю складанасць нашых прыкладанняў у новым узроўні кадравання. HTTP/2 дазваляе перамяжоўваць паведамленні запыту і адказу ў адным і тым жа злучэнні праз мультыплексаванне, якое раней было абмежаваннем канвеера.

HTTP/1.1vsHTTP/2.0

Мультыплексаванне дазволіла двухнакіраваны паток сегментаў запытаў і адказаў паміж кліентам і серверам без неабходнасці відавочнага парадку паміж імі. Гэта стала магчыма дзякуючы ўвядзенню канцэпцыі патокаў.

Паток - гэта лагічны адзінкавы запыт/адказ, пазначаны агульным ідэнтыфікатарам патоку.

Існавала праблема "head-of-line blocking" ( калі адзін запыт у выніку затрымкі блакуе перадачу наступных запытаў з данымі). Мультыплексаванне дазволіла вырашыць праблему "head-of-line blocking" на узроўні HTTP. Кожны фрэйм (мінімальная частка даных) зараз мае ідэнтыфікатар патоку, таму парадак перадачы больш не важны.

Але на транспартным узроўні (TCP) праблема засталася. TCP успрымае і працуе з данымі як з аднабайтавым патокам. Праблема ўзнікае, калі пакеты, якія змяшчаюць даныя «ў пачатку радка», губляюцца, таму што астатнія пакеты, адпаведна, затрымліваюцца, пакуль не будуць знойдзеныя адсутныя.

Сярод ключавых асаблівасцяў:

  • Двайковы пратакол, а не тэкставы. Яго нельга прачытаць і стварыць уручную.
  • Мультыплексаванне запытаў для адной крыніцы (некалькі паралельных запытаў могуць выкарыстоўваць адно злучэнне).
  • Расстаноўка прыярытэтаў для запытаў (push-паведамленняў). Гэта дазваляе серверу самастойна ініцыяваць перадачу дадзеных. Сервер можа расстаўляць прыярытэты для праштурхоўваемых рэсурсаў - гэта ключавое адрозненне ў прадукцыйнасці HTTP/2 ад HTTP/1.
  • Прымусовае cціскванне загалоўкаў з выкарыстаннем палепшаных алгарытмаў, якія паляпшаюць прадукцыйнасць, а таксама бяспеку.

Выкарыстанне HTTP/2 складае зараз 39.2% ад ўсіх сайтаў. HTTP/2 не патрабуе змен у вэб-сайтах і праграмах. Каб выкарыстоўваць яго, неабходны толькі абноўлены сервер, які ўзаемадзейнічае з апошнімі версіямі браўзера.

HTTP/2 - гэта альтэрнатыва, якая не робіць HTTP/1.1 састарэлым. Семантыка тая ж, што азначае зваротную сумяшчальнасць, спосаб перадачы даных палепшаны. У выніку атрымліваецца больш аптымізаваны пратакол з лепшай прадукцыйнасцю і меншай колькасцю абыходных шляхоў, неабходных для вырашэння такіх праблем, як блакіроўка галоўнай лініі. Ён не вырашае ўсіх праблем з HTTP/1.1, але, тым не менш, гэта значнае паляпшэнне ў параўнанні з папярэднікам.

HTTP/3

Са з'яўленнем смартфонаў і мноства іншых партатыўных прылад з бесправадной сувяззю, агульная колькасць вэб трафіку і час затрымкі паміж кліентам і серверам у залежнасці ад адлегласці паміж імі і колькасці пасрэднікаў могуць істотна павялічыцца. HTTP/2, які працуе праз TCP са сваёй праблемай "head-of-line blocking" на транспартным узроўні, мог ствараць затрымкі ў запытах і адказах. Таксама HTTP/2 не меў строгага патрабавання да шыфравання даных, і заставаліся праблемы з бяспекай пры перахопе загалоўкаў запытаў і адказаў.

HTTP/3 - гэта сур'ёзная рэдакцыя стандарту, якая мяняе асноўны сеткавы пратакол транспартнага ўзроўню з пратаколу кіравання перадачай (TCP) на QUIC («хуткія інтэрнэт-злучэнні UDP»). Але семантыка засталася, што і папярэдніх версіях HTTP.

QUIC распрацаваны, каб забяспечыць значна меншую затрымку для злучэнняў HTTP. Як і HTTP/2, гэта мультыплексны пратакол, але HTTP/2 працуе праз адно TCP-злучэнне, таму выяўленне страты пакетаў і іх паўторная перадача на ўзроўні TCP можа блакаваць усе патокі. QUIC запускае некалькі патокаў праз UDP і рэалізуе выяўленне страты пакетаў і рэтрансляцыю незалежна для кожнага патоку, так што ў выпадку ўзнікнення памылкі блакуецца толькі паток з дадзенымі ў гэтым пакеце.

У чэрвені 2022 года быў апублікаваны пратакол HTTP/3 у якасці прапанаванага стандарту, пасля чаго пачалася праца па наданні RFC статусу чарнавога стандарту (Draft Standard), што фактычна азначае поўную стабілізацыю пратакола і ўлік усіх выказаных заўваг.

TLS (пратакол, які выкарыстоўваўся для шыфравання асобна) зараз с'яўляецца часткай QUIC, то бок убудаваны ў новы пратакол.

параўнанне розных слаёў розных версій пратаколаў

У цяперашні час падтрымка QUIC і HTTP/3.0 ужо рэалізаваная ва ўсіх папулярных web-браўзэрах.

Розніца паміж http/2 і http/3

Як і HTTP/2, ён не аб'яўляе састарэлымі папярэднія асноўныя версіі пратаколу. Зараз выкарыстанне HTTP/3 складае 25.8% ад ўсіх сайтаў.

Асноўныя асаблівасці QUIC:

  1. Забяспечанне бяспекі, аналагічнай TLS.
  2. Кантроль за цэласнасцю патоку, які прадухіляе страту пакетаў.
  3. Страта пакета ўплывае на дастаўку толькі злучанага з ім струменя і не спыняе дастаўку даных у іншых струменях.
  4. Выкарыстанне спецыяльных кодаў карэкцыі памылак на ўзроўні пакета мінімізуюць затрымкі з-за паўторнай перадачы страчаных пакетаў, калі патрабуецца паўторная перадача даных страчанага пакета.
  5. Адсутнасць праблем з блакіроўкай чаргі TCP.
  6. Прыкметны прырост прадукцыйнасці і прапускной здольнасці ў параўнанні з TCP.
  7. Падтрымка ідэнтыфікатара злучэння (CID), які дазваляе скараціць час на ўстаноўку паўторнага злучэння для мабільных кліентаў.

Дадатковая інфармацыя:

  1. MDN Evolution of HTTP (eng)
  2. HTTP versions (eng)
  3. Агляд усіх версій (ru)
  4. HTTP protocol timeline (eng)
  5. Brief History of HTTP (eng)
  6. Head-of-line (HOL) blocking in HTTP/1 and HTTP/2 (eng)
  7. Пратакол HTTP/3.0 атрымаў статус прапанаванага стандарта (ru)
loveJS, 2023-05-13
Каментары

    (Каб даслаць каментар залагуйцеся ў свой уліковы запіс)

    ;