HTTP/3: Haʻihaʻi i ka honua a me ka wiwo ʻole ke ao hou

Ma mua o 20 mau makahiki ua nānā mākou i nā ʻaoʻao pūnaewele me ka hoʻohana ʻana i ka protocol HTTP. ʻAʻole noʻonoʻo ka hapa nui o nā mea hoʻohana i ke ʻano a me ke ʻano o ka hana. ʻIke kekahi poʻe aia ma kahi o HTTP aia TLS, a ma lalo o TCP, ma lalo o IP, a pēlā aku. A ʻo nā mea ʻē aʻe - heretics - manaʻoʻiʻo ʻo TCP kahi mea o ka wā i hala; makemake lākou i kahi mea wikiwiki, hilinaʻi a palekana. Akā i kā lākou hoʻāʻo ʻana e hana i kahi protocol kūpono hou, ua hoʻi lākou i ka ʻenehana o nā makahiki 80 a ke hoʻāʻo nei e kūkulu i ko lākou honua hou wiwo ʻole ma luna.
HTTP/3: Haʻihaʻi i ka honua a me ka wiwo ʻole ke ao hou

He moʻolelo liʻiliʻi: HTTP/1.1

I ka makahiki 1997, ua loa'a i ka protocol exchange protocol HTTP version 1.1 kona RFC pono'ī. I kēlā manawa, ua hoʻohana ʻia ka protocol e nā mākaʻikaʻi no kekahi mau makahiki, a ʻo ka maʻamau hou he ʻumikūmālima hou. Ua hana wale ka protocol ma ke kumu noi-pane a ua manaʻo nui ʻia no ka lawe ʻana i ka ʻike kikokikona.

Ua hoʻolālā ʻia ʻo HTTP e holo ma luna o ka protocol TCP, e hōʻoia i ka hāʻawi ʻia ʻana o nā ʻeke i ko lākou wahi e hele ai. Hana ʻo TCP ma ka hoʻokumu ʻana a me ka mālama ʻana i kahi pilina hilinaʻi ma waena o nā wahi hopena a me ka wāwahi ʻana i nā kaʻa i nā ʻāpana. Loaʻa nā māhele i kā lākou helu serial a me ka helu helu. Inā ʻaʻole hiki koke mai kekahi o nā ʻāpana a hōʻea mai me ka helu helu hewa, a laila e pau ka hoʻouna ʻana a hiki i ka hoʻihoʻi ʻia ʻana o ka ʻāpana nalowale.

Ma HTTP/1.0, ua pani ʻia ka pilina TCP ma hope o kēlā me kēia noi. He mea makehewa loa keia, no ka mea... ka hoʻokumu ʻana i kahi pilina TCP (3-Way-Handshake) he hana lohi. Ua hoʻokomo ʻo HTTP/1.1 i ka hana mālama ola, kahi e hiki ai iā ʻoe ke hoʻohana hou i hoʻokahi pili no nā noi he nui. Eia naʻe, no ka mea hiki ke lilo i bottleneck, ʻae ʻia nā hoʻokō like ʻole o HTTP/1.1 e wehe i nā pilina TCP he nui i ka host hoʻokahi. No ka laʻana, ʻae ʻo Chrome a me nā mana hou o Firefox i ʻeono mau pilina.
HTTP/3: Haʻihaʻi i ka honua a me ka wiwo ʻole ke ao hou
Ua manaʻo ʻia hoʻi e waiho ʻia ka hoʻopunipuni i nā protocols ʻē aʻe, a no kēia, ua hoʻohana ʻia ka protocol TLS ma luna o TCP, nāna i mālama pono i ka ʻikepili, akā hoʻonui hou i ka manawa e pono ai e hoʻokumu i kahi pilina. ʻO ka hopena, ua hoʻomaka ka hana lima lima e like me kēia:
HTTP/3: Haʻihaʻi i ka honua a me ka wiwo ʻole ke ao hou
Hōʻike kiʻi Cloudflare

No laila he nui nā pilikia i HTTP/1.1:

  • Hoʻonohonoho pili lohi.
  • Hoʻouna ʻia ka ʻikepili ma ke ʻano kikokikona, ʻo ia hoʻi, ʻaʻole pono ka lawe ʻana i nā kiʻi, nā wikiō a me nā ʻike kikoʻī ʻole.
  • Hoʻohana ʻia kahi pilina TCP no hoʻokahi noi, ʻo ia hoʻi, pono e loaʻa i nā noi ʻē aʻe kahi pilina ʻē aʻe a i ʻole e kali a hiki i ka hoʻokuʻu ʻana o ka noi o kēia manawa.
  • Kākoʻo wale ʻia ke kumu hoʻohālike huki. ʻAʻohe mea ma ka maʻamau e pili ana i ka server-push.
  • Hoʻouna ʻia nā poʻo ma ka kikokikona.

Inā hoʻokō ʻia ka server-push me ka hoʻohana ʻana i ka protocol WebSocket, a laila pono e hoʻoponopono ʻia nā pilikia i koe.

He mea hou hou: HTTP/2

I ka makahiki 2012, hoʻomaka ʻo Google e hana i ka protocol SPDY (pronounced "speedy") protocol. Ua hoʻolālā ʻia ka protocol e hoʻoponopono i nā pilikia nui o HTTP/1.1 a i ka manawa like i manaʻo ʻia e mālama i ka hoʻohālikelike hope. Ma 2015, ua hoʻokomo ka hui hana IETF i ka kikoʻī HTTP/2 e pili ana i ka protocol SPDY. Eia nā ʻokoʻa ma HTTP/2:

  • ʻO ka hoʻolaha binary.
  • Hoʻonui i nā noi HTTP he nui i hoʻokahi pilina TCP.
  • Hoʻokuʻu i waho o ka pahu (me ka ʻole WebSocket).

ʻO ka protocol kahi hana nui i mua. Ua ikaika ʻo ia paʻi i ka mana mua ma ka wikiwiki ʻaʻole koi i ka hana ʻana i nā pilina TCP he nui: ua hoʻohui ʻia nā noi āpau i hoʻokahi host i hoʻokahi. ʻO ia hoʻi, i loko o kahi pilina aia kekahi mau kahawai i kapa ʻia, aia kēlā me kēia me kāna ID ponoʻī. ʻO ka bonus he pahu pahu pahu pahu.

Eia naʻe, alakaʻi ka multiplexing i kahi pilikia koʻikoʻi. E noʻonoʻo ʻoe ke hoʻokō nei mākou i nā noi 5 i hoʻokahi kikowaena. I ka hoʻohana ʻana iā HTTP/2, e hoʻokō ʻia kēia mau noi āpau i loko o ka pilina TCP like, ʻo ia hoʻi, inā nalowale a loaʻa ʻole paha kekahi o nā ʻāpana o kekahi noi, e pau ka hoʻouna ʻana i nā noi a me nā pane a hiki i ka pau ʻana o ka ʻāpana nalowale. hoihoi hou ia. ʻIke loa, ʻoi aku ka maikaʻi o ka pilina pili, ʻoi aku ka wikiwiki o ka HTTP/2 e hana. Wahi a Daniel Stenberg, i nā kūlana i nalowale nā ​​packets no 2% o nā ʻeke a pau, ʻoi aku ka maikaʻi o ka HTTP/1.1 i ka polokalamu kele pūnaewele ma mua o HTTP/2 ma muli o ka wehe ʻana i nā pilina 6 ma mua o hoʻokahi.

Kapa ʻia kēia pilikia ʻo "head-of-line blocking" a, akā, ʻaʻole hiki ke hoʻoponopono i ka wā e hoʻohana ai iā TCP.
HTTP/3: Haʻihaʻi i ka honua a me ka wiwo ʻole ke ao hou
Na Daniel Steinberg

ʻO ka hopena, ua hana maikaʻi nā mea hoʻomohala o ka maʻamau HTTP / 2 a ua hana kokoke i nā mea āpau i hiki ke hana ma ka papa noi o ka model OSI. ʻO ka manawa kēia e iho ai i ka papa lawe kaʻa a hana i kahi protocol transport hou.

Pono mākou i kahi protocol hou: UDP vs TCP

Ua ʻike koke ʻia ʻo ka hoʻokō ʻana i kahi protocol layer transport hou he hana hiki ʻole i kēia mau lā. ʻO ka ʻoiaʻiʻo ʻo ka ʻike ʻana o nā lako a i ʻole nā ​​​​pahu waena (nā alahele, nā pahu ahi, nā kikowaena NAT ...) e pili ana i ka papa lawe, a ʻo ke aʻo ʻana iā lākou i kahi mea hou he hana paʻakikī loa. Eia kekahi, ua paʻa ke kākoʻo no nā protocol transport i loko o ka kernel o nā ʻōnaehana hana, a ʻaʻole makemake nui nā kernels e hoʻololi.

A maanei hiki i kekahi ke kiola i ko lakou mau lima a olelo aku, "E hana ana makou i HTTP/3 hou me ka makemake a me ka courtesans, aka, e lawe ia i 10-15 makahiki e hoʻokō 'ia (ma hope o kēia manawa ka hapa nui o ka lako lako. hoʻololi ʻia)," akā aia kekahi mea ʻaʻole pēlā ʻO ke koho maopopo ʻo ka hoʻohana ʻana i ka protocol UDP. ʻAe, ʻae, ka protocol like a mākou i hoʻolei ai i nā faila ma luna o LAN i ka hopena o nineties a me ka XNUMX mua. Aneane hiki i nā lako hana o kēia lā ke hana pū me ia.

He aha nā mea maikaʻi o UDP ma mua o TCP? ʻO ka mea mua, ʻaʻohe o mākou kau ʻana o ka transport layer i ʻike ʻia e ka hāmeʻa. ʻAe kēia iā mākou e hoʻoholo i ke kau ma nā wahi hopena iā mākou iho a hoʻoholo i nā paio ma laila. ʻO ia hoʻi, ʻaʻole mākou i kaupalena ʻia i hoʻokahi a i ʻole kekahi mau kau (e like me ka TCP), akā hiki ke hana i ka nui o lākou e like me kā mākou makemake. ʻO ka lua, ʻoi aku ka wikiwiki o ka lawe ʻana i ka ʻikepili ma o UDP ma mua o TCP. No laila, ma ke kumumanaʻo, hiki iā mākou ke uhaki i ke kaupaku wikiwiki i loaʻa i HTTP/2.

Akā naʻe, ʻaʻole hōʻoia ka UDP i ka hoʻouna ʻana i ka ʻikepili hilinaʻi. ʻO ka ʻoiaʻiʻo, ke hoʻouna wale nei mākou i nā ʻeke, me ka manaʻo e loaʻa iā lākou ka hopena. ʻAʻole i loaʻa? ʻAe, ʻaʻohe pōmaikaʻi ... Ua lawa kēia no ka hoʻouna ʻana i nā wikiō no nā pākeke, akā no nā mea koʻikoʻi e pono ai ʻoe i ka hilinaʻi, ʻo ia hoʻi, pono ʻoe e uhi i kahi mea ʻē aʻe ma luna o ka UDP.

E like me HTTP/2, hoʻomaka ka hana ma ka hana ʻana i kahi protocol hou ma Google ma 2012, ʻo ia hoʻi, ma kahi o ka manawa like me ka hoʻomaka ʻana o ka hana ma SPDY. Ma 2013, hōʻike ʻo Jim Roskind i ka lehulehu ʻO ka protocol QUIC (Quick UDP Internet Connections)., a i ka makahiki 2015 ua hoʻokomo ʻia ka Internet Draft no ka standardization i ka IETF. I kēia manawa, ʻokoʻa loa ka protocol i hoʻomohala ʻia e Roskind ma Google mai ka maʻamau, no laila ua hoʻomaka ka mana Google e kapa ʻia ʻo gQUIC.

He aha ka QUIC

ʻO ka mea mua, e like me ka mea i haʻi mua ʻia, ʻo kēia kahi mea hoʻopili ma luna o UDP. Piʻi ka pilina QUIC ma luna o ka UDP, kahi e hiki ai, ma ka hoʻohālikelike me HTTP/2, hiki i kekahi mau kahawai ke ola. Aia kēia mau kahawai ma nā wahi hope wale nō a lawelawe kūʻokoʻa. Inā loaʻa ka poho ʻeke i hoʻokahi kahawai, ʻaʻole ia e pili i nā mea ʻē aʻe.
HTTP/3: Haʻihaʻi i ka honua a me ka wiwo ʻole ke ao hou
Na Daniel Steinberg

ʻO ka lua, ʻaʻole hoʻokō ʻia ka hoʻopili ʻana ma kahi pae ʻokoʻa, akā ua hoʻokomo ʻia i ka protocol. ʻAe kēia iā ʻoe e hoʻokumu i kahi pilina a hoʻololi i nā kī lehulehu i ka lima lima hoʻokahi, a hiki iā ʻoe ke hoʻohana i ka mīkini lima lima akamai 0-RTT a pale i ka lohi lima lima. Eia hou, hiki i kēia manawa ke hoʻopili i nā ʻeke ʻikepili pākahi. ʻAe kēia iā ʻoe ʻaʻole e kali no ka hoʻopau ʻana i ka loaʻa ʻana o ka ʻikepili mai ke kahawai, akā e hoʻokaʻawale i nā ʻeke i loaʻa. ʻAʻole hiki ke hana i kēia ʻano hana ma TCP, no ka mea Ua hana kūʻokoʻa ʻo TLS a me TCP kekahi i kekahi, a ʻaʻole hiki iā TLS ke ʻike i nā ʻāpana o ka ʻikepili TCP e ʻoki ʻia. A no laila, ʻaʻole hiki iā ia ke hoʻomākaukau i kāna mau ʻāpana i kūpono lākou i nā ʻāpana TCP hoʻokahi a hoʻokahi a hiki ke hoʻokaʻawale kūʻokoʻa. ʻO kēia mau hoʻomaikaʻi āpau e ʻae iā QUIC e hōʻemi i ka latency i hoʻohālikelike ʻia me TCP.
HTTP/3: Haʻihaʻi i ka honua a me ka wiwo ʻole ke ao hou
ʻO ke kolu, ʻo ka manaʻo o ke kahe uila e hiki ai iā ʻoe ke hoʻokaʻawale i ka pilina mai ka helu IP o ka mea kūʻai aku. He mea koʻikoʻi kēia, no ka laʻana, ke hoʻololi ka mea kūʻai mai kahi wahi komo Wi-Fi i kekahi, e hoʻololi ana i kāna IP. I kēia hihia, i ka wā e hoʻohana ai i ka TCP, ua hana ʻia kahi kaʻina hana lōʻihi i ka manawa e pau ai nā pilina TCP a hana ʻia nā pilina hou mai kahi IP hou. I ka hihia o QUIC, hoʻomau ka mea kūʻai aku i ka hoʻouna ʻana i nā ʻeke i ke kikowaena mai kahi IP hou me ka ID kahawai kahiko. No ka mea He kūʻokoʻa ke kahawai ID a ʻaʻole hoʻohana hou ʻia; hoʻomaopopo ke kikowaena ua hoʻololi ka mea kūʻai aku i ka IP, hoʻouna hou i nā ʻeke i nalowale a hoʻomau i ke kamaʻilio ʻana ma ka helu wahi hou.

ʻO ka hā, ua hoʻokō ʻia ʻo QUIC ma ka pae noi, ʻaʻole ka pae ʻōnaehana hana. ʻO kēia, ma kekahiʻaoʻao, hiki iāʻoe ke hoʻololi wikiwiki i ka protocol, no ka mea No ka loaʻa ʻana o kahi mea hou, pono ʻoe e hōʻano hou i ka waihona, ma mua o ke kali ʻana i kahi mana OS hou. Ma ka ʻaoʻao ʻē aʻe, alakaʻi kēia i ka piʻi ikaika o ka hoʻohana ʻana i ka processor.

A ʻo ka hope, nā poʻomanaʻo. ʻO ka hoʻopiʻi poʻomanaʻo kekahi o nā mea ʻokoʻa ma waena o QUIC a me gQUIC. ʻAʻole wau i ʻike i ke kumu o ka hoʻolilo ʻana i ka manawa nui i kēia, e ʻōlelo wale wau i ka mana i waiho ʻia no ka standardization, ua hana ʻia ka hoʻoemi poʻo e like me ka hiki ke hoʻopili i ke poʻo ma HTTP/2. Hiki iā ʻoe ke heluhelu hou aku maanei.

ʻEhia ka wikiwiki?

He nīnau paʻakikī. ʻO ka ʻoiaʻiʻo a hiki i ka loaʻa ʻana o kahi maʻamau, ʻaʻohe mea kūikawā e ana. ʻO nā helu helu wale nō paha mākou mai Google mai, e hoʻohana ana i ka gQUIC mai 2013 a i 2016. hōʻike ʻia i ka IETFe pili ana i ka 90% o ka hele ʻana i kā lākou mau kikowaena mai ka polokalamu kele Chrome e hoʻohana nei iā QUIC. Ma ka hōʻike hoʻokahi, hōʻike lākou i ka hoʻouka ʻana o nā ʻaoʻao ma kahi o 5% ʻoi aku ka wikiwiki ma o ka gQUIC a he 30% ka liʻiliʻi o nā stutters i ke kahe wikiō i hoʻohālikelike ʻia me TCP.

Ma 2017, ua paʻi ʻia kahi hui o nā mea noiʻi i alakaʻi ʻia e Arash Molavi Kakhki hana nui e aʻo i ka hana o gQUIC i hoʻohālikelike ʻia me TCP.
Ua hōʻike ʻia ka haʻawina i kekahi mau nāwaliwali o ka gQUIC, e like me ka paʻa ʻole o ka hui ʻana o nā ʻeke pūnaewele, ka manaʻoʻiʻo (pono ʻole) i ke kahe ʻana i ka bandwidth a me ka hoʻololi lohi o nā mea liʻiliʻi (a hiki i 10 kb). ʻO ka mea hope, akā, hiki ke uku ʻia ma ka hoʻohana ʻana iā 0-RTT. Ma nā hihia ʻē aʻe a pau i aʻo ʻia, ua hōʻike ka gQUIC i ka piʻi ʻana o ka wikiwiki i hoʻohālikelike ʻia me TCP. He paʻakikī ke kamaʻilio e pili ana i nā helu kikoʻī ma aneʻi. ʻOi aku ka maikaʻi o ka heluhelu ʻana ka haʻawina ponoʻī ai ole ia, pou pōkole.

Maanei pono e ʻōlelo ʻia e pili ana kēia ʻikepili i ka gQUIC, a ʻaʻole kūpono ia no ka maʻamau i kūkulu ʻia. He aha ka mea e hiki mai ana no QUIC: he mea huna ia, akā aia ka manaʻolana e noʻonoʻo a hoʻoponopono ʻia nā nāwaliwali i ʻike ʻia ma gQUIC.

He wahi o ka wā e hiki mai ana: pehea e pili ana iā HTTP/3?

Akā, eia nā mea a pau i akaka: ʻaʻole e loli ka API ma kekahi ʻano. E noho like nā mea a pau e like me ia ma HTTP/2. ʻAe, inā mau ka API, pono e hoʻoholo ʻia ka hoʻololi ʻana i HTTP/3 me ka hoʻohana ʻana i kahi mana hou o ka waihona ma ke kua e kākoʻo ana i ka halihali QUIC. ʻOiaʻiʻo, pono ʻoe e mālama i ka hāʻule ma nā mana kahiko o HTTP no kekahi manawa, no ka mea ʻAʻole mākaukau ka Pūnaewele no ka hoʻololi piha ʻana i ka UDP.

Na wai i kākoʻo

ʻaneʻi papa inoa nā hoʻokō QUIC e kū nei. ʻOiai ka nele o kahi maʻamau, ʻaʻole hewa ka papa inoa.

ʻAʻohe polokalamu kele pūnaewele e kākoʻo nei iā QUIC i kahi hoʻokuʻu hana. I kēia manawa ua loaʻa ka ʻike e pili ana ke kākoʻo no HTTP/3 i Chrome, akā i kēia manawa ma Canary wale nō.

ʻO nā mea hope, kākoʻo wale ʻo HTTP/3 Caddy и Cloudflare, akā hoʻokolohua mau. NGINX i ka hopena o ka puna 2019 kūkala ʻia, ua hoʻomaka lākou e hana ma ke kākoʻo HTTP/3, akā ʻaʻole i hoʻopau.

He aha nā pilikia?

Noho ʻoe a me aʻu i ke ao maoli, kahi ʻaʻole hiki i ka ʻenehana nui ke hōʻea i ka lehulehu me ka ʻole e hālāwai me ke kūʻē, a ʻo QUIC ʻaʻohe mea ʻē aʻe.

ʻO ka mea nui, pono ʻoe e wehewehe i ka polokalamu kele pūnaewele ʻo "https://" ʻaʻole ia he ʻoiaʻiʻo e alakaʻi ana i ke awa TCP 443. ʻAʻole paha he TCP. Hoʻohana ʻia ke poʻo Alt-Svc no kēia. Hāʻawi ia iā ʻoe e haʻi i ka polokalamu kele pūnaewele e loaʻa pū ana kēia pūnaewele ma kēlā a me kēia protocol ma kēlā a me kēlā ʻōlelo. Ma ke kumumanaʻo, pono e hana kēia e like me ka leʻaleʻa, akā ma ka hoʻomaʻamaʻa e ʻike mākou i ka ʻoiaʻiʻo hiki i ka UDP, no ka laʻana, ke pāpā ʻia ma kahi pā ahi e pale aku i nā hoʻouka kaua DDoS.

Akā inā ʻaʻole pāpā ʻia ka UDP, aia paha ka mea kūʻai aku ma hope o kahi router NAT i hoʻonohonoho ʻia e hoʻopaʻa i kahi hālāwai TCP e ka IP address, a mai ke hoʻohana nei mākou i ka UDP, ʻaʻohe hālāwai lako, ʻaʻole e paʻa ka NAT i ka pilina, a me kahi hālāwai QUIC e haki mau.

ʻO kēia mau pilikia āpau no ka mea ʻaʻole i hoʻohana mua ʻia ka UDP no ka hoʻouna ʻana i ka ʻike pūnaewele, a ʻaʻole hiki i nā mea hana ʻenehana ke ʻike mua e hiki mai ana kēia. Ma ke ala like, ʻaʻole maopopo maoli nā luna hoʻoponopono pehea e hoʻonohonoho pono ai i kā lākou pūnaewele no ka hana ʻana o QUIC. E loli mālie ana kēia kūlana, a, i kēlā me kēia hihia, ʻoi aku ka liʻiliʻi o ia mau loli ma mua o ka hoʻokō ʻana i kahi protocol layer transport hou.

Eia hou, e like me ka mea i wehewehe ʻia, hoʻonui nui ʻo QUIC i ka hoʻohana ʻana i ka CPU. Daniel Stenberg mahalo ʻia ka ulu ʻana o ka mea hana a hiki i ʻekolu manawa.

I ka manawa hea e hiki mai ai ka HTTP/3?

Kūlana makemake e ʻae e Mei 2020, akā hāʻawi ʻia nā palapala i hoʻopaʻa ʻia no Iulai 2019 i hoʻopau ʻole ʻia i kēia manawa, hiki iā mākou ke ʻōlelo e hoʻihoʻi ʻia ka lā.

ʻAe, ua hoʻohana ʻo Google i kāna hoʻokō gQUIC mai 2013. Inā ʻoe e nānā i ka noi HTTP i hoʻouna ʻia i ka ʻenekini huli Google, e ʻike ʻoe i kēia:
HTTP/3: Haʻihaʻi i ka honua a me ka wiwo ʻole ke ao hou

haʻina

ʻIke ʻia ʻo QUIC i kēia manawa he ʻenehana maʻalahi, akā hoʻohiki maikaʻi loa. Ke noʻonoʻo nei i nā makahiki he 20 i hala iho nei, ua pili nā optimizations āpau o nā protocol layer transport i ka TCP, QUIC, ka mea i ka hapa nui o ka hana maikaʻi loa, ua nānā maikaʻi loa.

Eia nō naʻe, aia nā pilikia i hoʻoholo ʻole ʻia e hoʻoponopono ʻia i nā makahiki e hiki mai ana. Hiki ke hoʻopaneʻe ke kaʻina hana ma muli o ka loaʻa ʻana o ka lako lako, ʻaʻohe mea makemake e hoʻonui, akā naʻe, ʻike ʻia nā pilikia āpau, a ma hope a ma hope paha e loaʻa iā mākou āpau HTTP/3.

Ke kokoke mai nei ka wā e hiki mai ana!

Source: www.habr.com

Pākuʻi i ka manaʻo hoʻopuka