HTTP ma luna o UDP - hoʻohana maikaʻi i ka protocol QUIC
ʻO QUIC (Quick UDP Internet Connections) kahi protocol ma luna o ka UDP e kākoʻo ana i nā hiʻohiʻona āpau o TCP, TLS a me HTTP/2 a hoʻoponopono i ka hapa nui o ko lākou mau pilikia. Ua kapa pinepine ʻia he protocol hou a i ʻole "hoʻokolohua", akā ua lōʻihi ka lōʻihi o ka pae hoʻokolohua: ua hoʻomau ʻia ka hoʻomohala ʻana ma mua o 7 mau makahiki. I kēia manawa, ʻaʻole i lilo ka protocol i mea maʻamau, akā ua hoʻolaha nui ʻia. No ka laʻana, hoʻohana ʻia ʻo QUIC e nā kanaka nunui e like me Google a me Facebook e wikiwiki i ka holo a hoʻemi i nā lohi i nā pūnaewele kelepona, a ua haʻi ka IETF i kāna kumu o ka protocol ke kumu no ka maʻamau HTTP/3 (ʻoiai ʻo HTTP/2 hoʻohana. 44.8% wale nō paena).
Kuhi
Ua hoʻomohala ʻia ʻo QUIC ma ke ʻano he pani no ka TCP hoʻoilina, i hoʻolālā mua ʻia no nā pūnaewele uea haʻahaʻa. Hāʻawi ʻo TCP i nā ʻeke ma ke ʻano, no laila inā nalowale hoʻokahi ʻeke, ua pau ka pila holoʻokoʻa (pale poʻo-o-laina), e hoʻopilikia i ka maikaʻi a me ka paʻa o ka pilina. No ka pale ʻana i nā poho nui, hoʻohana ʻia nā ʻoihana pūnaewele i ka hoʻohana ʻana i nā buffers nui, a laila e alakaʻi i ka redundancy a me ka pane hewa hewa ʻole o ka protocol (hoʻopaʻapaʻa). Eia hou, hoʻohana ka TCP i ka manawa nui no ka hoʻokumu ʻana i kahi pilina: SYN/ACK a me TLS noi i hoʻokaʻawale ʻia, e koi ana i ʻekolu mau huakaʻi ma kahi o hoʻokahi, e like me kā QUIC.
No ka hoʻohui ʻana o QUIC i kahi pani TCP a me ka hoʻokō ʻana o TLS 1.3, hoʻopili mau ʻia nā pilina a pau, a ʻaʻole maʻalahi ka hoʻokaʻawale ʻana i ia mau kaʻa ma mua o ka hele ʻana ma luna o HTTPS. Eia hou, ua hoʻokō ʻia ʻo QUIC ma ka pae noi, no ka mea e lawe ʻia kahi pani piha o ka waihona TCP ke ao pau ole.
ʻOiai ke kākoʻo ʻana i ka multiplexing ma HTTP/2, ua mau ka pilikia o ka pale ʻana i ke poʻo o ka laina ma muli o ka pono e hāʻawi i nā ʻeke ma ke ʻano. Hoʻokomo ʻia ʻo QUIC ma luna o ka UDP, no laila ʻaʻohe mea pale i ke kumu, a no ka pale ʻana i nā ʻeke mai ka nalowale mau loa, ua helu ʻia lākou a hiki ke loaʻa i nā ʻāpana o "nā hoalauna," e hāʻawi ana i ka redundancy. Eia hou, ua hoʻokaʻawale ʻo QUIC i ka queue monolithic i nā ʻāpana he nui no nā ʻano noi like ʻole i loko o kahi pilina. No laila, inā nalowale kahi ʻeke, hiki ke kū mai nā pilikia no hoʻokahi queue (no ka laʻana, no ka hoʻoili ʻana i kahi faila):
E hoʻohana
I ka hoʻomaka ʻana, ua hoʻomohala ʻia ʻo QUIC i loko o Google a ua hana nui ʻia no ka hoʻohana ʻana i loko o ka hui. I ka makahiki 2013, ua hoʻoili ʻia i ka IETF no ka hoʻohālikelike ʻana (e hoʻomau ʻia ana), a i kēia manawa hiki i nā mea a pau ke komo i ka hoʻomohala ʻana i ka protocol ma ke noi ʻana i nā mea i nalowale. Hoʻonohonoho ka hui hana IETF i nā hālāwai makahiki kahi e ʻae ʻia ai kahi maʻamau hou a kūkākūkā ʻia nā mea hou. ʻO kēia hoʻokō o QUIC i manaʻo ʻia ʻo ia ka mea nui a ma muli o ke kumu i hōʻoia ʻia ai ka maʻamau HTTP/3.
I kēia manawa, ʻaʻohe kamaʻilio e pili ana i ka hoʻokomo ʻana iā HTTP/3 i ka protocol nui, no ka mea ʻaʻole i pau a ʻaneʻane ʻaʻole kākoʻo ʻia:
Akā hiki ke hoʻokō ʻia ʻo QUIC ma ke ʻano he kaʻa ma waena o ka noi a me ke kikowaena, i hana maikaʻi ʻia ma Uber:
ʻO ka ʻōlelo a Uber no ka hoʻokomo ʻana o QUIC
No ka hoʻokomo pono ʻana i ka QUIC a me ka hoʻomaikaʻi ʻana i ka hana noiʻi ma nā wahi pili pono ʻole, ua hoʻololi mākou i ka waihona kahiko (HTTP/2 ma luna o TLS/TCP) me ka protocol QUIC. Ua hoʻohana mākou i ka waihona pūnaewele Cronet mai Nā papahana Chromium, aia i loko o ka mana Google o ka protocol - gQUIC. Ke hoʻomaikaʻi mau ʻia nei kēia hoʻokō e hahai i nā kikoʻī IETF hou loa.
Ua hoʻohui mua mākou iā Cronet i kā mākou mau polokalamu Android e hoʻohui i ke kākoʻo no QUIC. Ua hana ʻia ka hoʻohui ʻana ma ke ʻano e hōʻemi ai i nā kumukūʻai neʻe e like me ka hiki. Ma kahi o ka hoʻololi piha ʻana i ka waihona pūnaewele kahiko i hoʻohana i ka waihona OkHttp, ua hoʻohui mākou i ka Cronet MALALO o ka OkHttp API framework. Ma ka hana ʻana i ka hoʻohui ʻana i kēia ala, ua pale mākou i nā loli i kā mākou kelepona pūnaewele (i hoʻohana ʻia e ʻO Retrofit) ma ka pae API.
E like me ka hoʻokokoke ʻana no nā polokalamu Android, ua hoʻokomo mākou iā Cronet i nā polokalamu Uber ma iOS, e ʻae ana i ka hele ʻana o HTTP mai ka pūnaewele. APIhoʻohana ʻana NSURLProtocol. ʻO kēia abstraction, i hoʻolako ʻia e ka iOS Foundation, e mālama i ka ʻikepili URL kikoʻī protocol a hōʻoia e hiki iā mākou ke hoʻohui iā Cronet i kā mākou mau noi iOS me ka ʻole o nā kumukūʻai neʻe nui.
Ma ka ʻaoʻao hope ua hopu lākou i nā pilina QUIC ma o Google Cloud lb, ʻo ia kākoʻo protocol mai ka waena o 2018.
ʻAʻole ia he mea kupanaha ka hana nui ʻana o Google Cloud me ka protocol i kūkulu ʻia e Google, akā he aha nā mea ʻē aʻe?
Nginx
ʻAʻole i hala aku nei ʻo CloudFlare Ua ho'āʻo wau e hele i keʻa nginx (ʻaʻole i kākoʻo i ka HTTP/3 ma ka paʻamau) me kāna mea hana Quiche. Loaʻa ka hoʻokō ʻana ma ke ʻano he faila .patch hoʻokahi, e hele mai me kahi aʻoaʻo hoʻonohonoho:
curl -O https://nginx.org/download/nginx-1.16.1.tar.gz
tar xvzf nginx-1.16.1.tar.gz
git clone --recursive https://github.com/cloudflare/quiche
cd nginx-1.16.1
patch -p01 < ../quiche/extras/nginx/nginx-1.16.patch
Maanei hiki iā ʻoe ke hoʻohui i kāu mau modula inā pono
./configure
--prefix=$PWD
--with-http_ssl_module
--with-http_v2_module
--with-http_v3_module
--with-openssl=../quiche/deps/boringssl
--with-quiche=../quiche
make
ʻO nā mea i koe e hiki ai ke kākoʻo HTTP/3
events {
worker_connections 1024;
}
http {
server {
# Enable QUIC and HTTP/3.
listen 443 quic reuseport;
# Enable HTTP/2 (optional).
listen 443 ssl http2;
ssl_certificate cert.crt;
ssl_certificate_key cert.key;
# Enable all TLS versions (TLSv1.3 is required for QUIC).
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
# Request buffering in not currently supported for HTTP/3.
proxy_request_buffering off;
# Add Alt-Svc header to negotiate HTTP/3.
add_header alt-svc 'h3-27=":443"; ma=86400';
}
}
ʻAʻole hiki ke hoʻohui ʻia ma o HTTP/3 i nā mākaʻikaʻi maʻamau, akā hiki iā ʻoe ke hoʻohana Kanaka Chrome a holo me ka hae --enable-quic, e hele i kāu kikowaena a i ʻole, no ka laʻana, ka pūnaewele quic.rocks a nānā i ke ʻano pili i nā Mea Hoʻomohala:
Ma kahi o HTTP/3 ua kākau ʻia http2+quic/99, akā, ʻo ia ka mea like.
Nā ʻenehana ʻē aʻe
Kākoʻo pū ʻo QUIC LiteSpeed (ʻo ia ka mea i pili iā Facebook ma HTTP/3 me ka hauʻoli nui) a me ka holomua Caddy. ʻAʻole hiki iā Apache ke hana i kēia manawa, akā ke holo nei ka hana holo piha.
I kekahi lā aʻe ua wehe ʻo Microsoft code hoʻokō msquic, kahi i loaʻa ʻole ai nā hana a pau mai ka maʻamau IETF, akā he holomua nui kēia.
hopena
ʻAʻole paʻa ka hoihoi i ka QUIC, akā ke ulu nei, a ke hoʻomaka nei ka hana e hoʻohālikelike ai. Hōʻike ʻia nā hana hou o ka protocol i kēlā me kēia mahina, a i kēlā me kēia makahiki, ʻoi aku ka nui o nā mea hoʻomohala i manaʻoʻiʻo ʻo QUIC ka wā e hiki mai ana. Hiki paha ke hoʻokomo i ka protocol i nā mana e hiki mai ana o ka TCP stack, ʻo ia hoʻi e neʻe koke ka Pūnaewele holoʻokoʻa i nā pilina paʻa a wikiwiki hoʻi.
I kēia manawa hiki iā ʻoe ke hoʻonohonoho i ka pilina QUIC no kāu ʻenehana a i ʻole hāʻawi ʻia i nā polokalamu kele - ke hoʻolālā nei lākou a pau e hoʻohui i ke kākoʻo no ka protocol, a ʻoi aku ka hauʻoli o nā helu kaumaha me caniuse.