áá»áœááºá¯ááºááá¯á·ááẠHTTP áááá¯ááá¯áá±á¬ááᯠá¡áá¯á¶ážááŒá¯á áááºá
á¬áá»ááºááŸá¬áá»á¬ážááᯠááŒáá·áºááŸá¯áá±áááºááŸá¬ á¡ááŸá
Ạ20 áá»á±á¬áºááŸáááŒá®ááŒá
áºáááºá á¡áá¯á¶ážááŒá¯áá°á¡áá»á¬ážá
á¯ááẠáááºážááẠáááºááá·áºá¡áá¬ááŸáá·áº áááºááá¯á·á¡áá¯ááºáá¯ááºááŒá±á¬ááºážááá¯ááẠáá
ááºážá
á¬ážááŒáá±á HTTP á¡á±á¬ááºááœáẠáá
áºáá±áá¬ááœáẠTLS ááŸáááŒá±á¬ááºážá áááºážá¡á±á¬ááºááœáẠTCP ááŒá
áºáááºá IP á¡á±á¬ááºááœáẠá
áááºááá¯á·ááŒá
áºáááºá ááá¯á·á¡ááŒáẠá¡ááŒá¬ážáá°áá»á¬áž - ááá
á¹áá¬áááááá»á¬áž - TCP ááẠá¡ááááºááŸá¡áá¬ááŒá
áºáááºáᯠáá¯á¶ááŒááºááŒááŒá®áž áááºážááá¯á·ááẠááá¯ááá¯ááŒááºáááºá ááá¯ááá¯á
áááºáá»áááŒá®áž áá¯á¶ááŒá¯á¶áá±á¬ á¡áá¬áá
áºáá¯ááᯠááá¯áá»ááºááŒáááºá ááá¯á·áá±á¬áº á
á¶ááŒáááá¯ááá¯áá±á¬á¡áá
áºáá
áºáá¯ááᯠáá®ááœááºááẠáááºážááá¯á·áááŒáá¯ážáááºážááŸá¯áá»á¬ážááœááºá áááºážááá¯á·ááẠ80s ááááºážááá¬ááá¯á· ááŒááºáááºáá±á¬ááºááŸááá¬ááŒá®áž áááºážááá¯á·ááá²ááá·áºáá±á¬ááá¹áá¬áá
áºááᯠáááºáá±á¬ááºááẠááŒáá¯ážá
á¬ážáá±ááŒáááºá
ááŸááºáááºážá¡áááºážáááº- HTTP/1.1
1997 áá¯ááŸá áºááœááºá á á¬áá¬ážá¡áá»ááºá¡áááºáááŸááºáá±ážáááá¯ááá¯áá±á¬ HTTP áá¬ážááŸááºáž 1.1 ááẠáááºážáááá¯ááºááá¯áẠRFC ááᯠááá°áá²á·áááºá ááá¯á¡áá»áááºááœááºá áááá¯ááá¯áá±á¬ááᯠááá±á¬ááºáá¬áá»á¬ážá ááŸá áºá¡áá±á¬áºááŒá¬ á¡áá¯á¶ážááŒá¯áá²á·ááŒá®áž á á¶ááŸá¯ááºážáá áºááẠáá±á¬ááºááẠááá·áºáá«ážáᯠááŒá¬ááŒáá·áºáá²á·áááºá áááá¯ááá¯áá±á¬ááẠáá±á¬ááºážááá¯áá»ááº-áá¯á¶á·ááŒááºááŸá¯ áááá¬ááá±á«áºááœááºáᬠáá¯ááºáá±á¬ááºáá²á·ááŒá®áž á á¬áá¬ážá¡áá»ááºá¡áááºáá»á¬áž áá±ážááá¯á·ááŒááºážá¡ááœáẠá¡ááááááºááœááºáá«áááºá
HTTP ááẠTCP áááá¯ááá¯áá±á¬áááááºááœáẠá¡áá¯ááºáá¯ááºááẠáá®ááá¯ááºážáá¯ááºáá¬ážááŒá®áž packet áá»á¬ážááᯠáááºážááá¯á·ááŠážáááºáá¬ááá¯á· á áááºáá»áá¯á¶ááŒááºá áœá¬ ááá¯á·áá±á¬ááºááŒá±á¬ááºážáá±áá»á¬á á±áá«áááºá TCP ááẠendpoints áá»á¬ážááŒá¬áž áá¯á¶ááŒááºá áááºáá»ááá±á¬áá»áááºáááºááŸá¯ááᯠáá°áá±á¬ááºááŒá®áž ááááºážááááºážááŒááºážááŒáá·áº áááºážááŒá±á¬ááºážáá»á¬ážááᯠá¡ááá¯ááºážáá»á¬ážááœá²áᬠáá¯ááºáá±á¬ááºáááºá á¡ááá¯ááºážáá»á¬ážááẠáááºážááá¯á·áááá¯ááºááá¯ááºáá¶áá«ááºááŸáá·áº checksum ááŸááááºá á¡áááºá á¡ááá¯ááºážáá áºáá¯á០áá¯ááºáááẠááá±á¬ááºáá«á ááá¯á·ááá¯áẠáááŸááºáá±á¬ á á áºáá±ážááŸá¯áá áºáá¯ááŒáá·áº áá±á¬ááºááŸááá¬áá«áá áá¯á¶ážááŸá¯á¶ážááœá¬ážáá±á¬ á¡ááá¯ááºážááᯠááŒááºáááºááááŸáááá»ááºáž áá¯ááºááœáŸáá·áºááŸá¯ áááºááá·áºááœá¬ážáááºááŒá áºáááºá
HTTP/1.0 ááœááºá áá±á¬ááºážááá¯ááŸá¯áá
áºáá¯á
á®ááŒá®ážáá±á¬áẠTCP áá»áááºáááºááŸá¯ááᯠááááºáá²á·áááºá áá«áᬠá¡ááœááºááŒá¯ááºážáá®ážáá²á·áá¬áá«... TCP áá»áááºáááºááŸá¯ (3-Way-Handshake) áá°áá±á¬ááºááŒááºážááẠááŸá±ážááœá±ážáá±á¬ áá¯ááºáááºážá
ááºááŒá
áºáááºá HTTP/1.1 ááẠáá±á¬ááºážááá¯áá»ááºáá»á¬ážá
áœá¬á¡ááœáẠáá»áááºáááºááŸá¯áá
áºáá¯á¡á¬áž ááŒááºáá¯á¶ážááá¯ááºá
á±ááá·áº Keep-alive ááá¹ááá¬ážááᯠááááºáááºáá±ážáá²á·áááºá ááá¯á·áá±á¬áºá áááºážááẠá¡ááœááºááá° ááááºááá¯á·ááŸá¯áá
áºáᯠááŒá
áºáá¬ááá¯ááºáá±á¬ááŒá±á¬áá·áº HTTP/1.1 á á¡áá»áá¯ážáá»áá¯ážáá±á¬ á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯áá»á¬ážááẠTCP áá»áááºáááºááŸá¯áá»á¬ážááᯠáá
áºáá¯áááºážáá±á¬ host ááá¯á· ááœáá·áºááœáá·áºááŒá¯áá¬ážáááºá á¥ááá¬á¡á¬ážááŒáá·áºá Chrome ááŸáá·áº Firefox á áááºááá±á¬áá¬ážááŸááºážáá»á¬ážááẠáá»áááºáááºááŸá¯ ááŒá±á¬ááºáá¯á¡áá ááœáá·áºááŒá¯áááºá
áá¯ááºááŸááºááŒááºážá¡á¬áž á¡ááŒá¬ážáááá¯ááá¯áá±á¬áá»á¬ážááœáẠáá»ááºáá¬ážááááºááŒá
áºááŒá®áž áááºážá¡ááœáẠTLS áááá¯ááá¯áá±á¬ááẠáá±áá¬ááᯠá
áááºáá»áá¯á¶ááŒááºá
áœá¬ áá¬ááœááºáá±ážáá¬ážááá·áº TCP ááᯠââá¡áá¯á¶ážááŒá¯áá²á·áá±á¬áºáááºáž áá»áááºáááºááŸá¯áá
áºáá¯áááºáá±á¬ááºááẠááá¯á¡ááºááá·áºá¡áá»áááºááᯠááá¯ááá¯ááá¯ážááŒáŸáá·áºáá²á·áááºá ááááºá¡áá±ááŒáá·áº áááºááœá²ááŸá¯ááºáááºááŒááºáž áá¯ááºáááºážá
ááºááẠá€áá²á·ááá¯á· á
áááºáá¬áááº-
Cloudflare ááá¯ááºáá±á¬áºáá¯á¶
ááá¯á·ááŒá±á¬áá·áº HTTP/1.1 ááœáẠááŒá¿áá¬áá»á¬ážá áœá¬ááŸááááºá
- ááŸá±ážááœá±ážáá±á¬ áá»áááºáááºááŸá¯ á áá áºááá·áºááœááºážááŒááºážá
- áá±áá¬ááᯠá á¬áá¬ážáá¯á¶á á¶ááŒáá·áº áá±ážááá¯á·ááŒááºážááŒá áºááŒá®ážá ááá¯ááá¯áááºááŸá¬ áá¯ááºáá¯á¶áá»á¬ážá áá®áá®ááá¯áá»á¬ážááŸáá·áº á¡ááŒá¬ážá á¬áá¬ážááá¯ááºáá±á¬ á¡áá»ááºá¡áááºáá»á¬ážááᯠáá±ážááá¯á·ááŒááºážááŸá¬ áááá±á¬ááºááŸá¯ áááŸááá±á
- áá±á¬ááºážááá¯áá»ááºáá áºáá¯á¡ááœáẠTCP áá»áááºáááºááŸá¯áá áºáá¯á¡á¬áž á¡áá¯á¶ážááŒá¯áááºá ááá¯ááá¯áááºááŸá¬ á¡ááŒá¬ážáá±á¬ááºážááá¯ááŸá¯áá»á¬ážááẠá¡ááŒá¬ážáá»áááºáááºááŸá¯ááᯠááŸá¬ááœá±áááẠááá¯á·ááá¯áẠáááºááŸááá±á¬ááºážááá¯áá»ááºááá¯ááºááŒááºáá®á¡áá á á±á¬áá·áºááááºááŒá áºáááºá
- ááœá²áá±á¬áºáááºááá¯áᬠáá¶á·ááá¯ážáá¬ážáááºá server-push ááŸáá·áºáááºáááºááŒá®áž á á¶áááºááŸááºáá»ááºááœáẠáá¬ááŸáááŸááá«á
- áá±á«ááºážá á®ážáá»á¬ážááᯠá á¬áá¬ážááŒáá·áº áá±ážááá¯á·áá«áááºá
Server-push ááᯠá¡áááºážáá¯á¶áž WebSocket áááá¯ááá¯áá±á¬ááᯠá¡áá¯á¶ážááŒá¯ááŒá®áž áá¯ááºáá±á¬ááºáá«á áá»ááºááŒá¿áá¬áá»á¬ážááᯠááá¯ááá¯ááŒááºážáááºá áœá¬ ááŒá±ááŸááºážááááºááŒá áºáááºá
á¡áááºážááẠáá±ááºáá®ááŸá¯- HTTP/2
2012 áá¯ááŸá áºááœáẠGoogle ááẠSPDY (á¡áá¶ááœáẠ"ááŒááºáááº") áááá¯ááá¯áá±á¬ááᯠá áááºáá¯ááºáá±á¬ááºáá²á·áááºá áááá¯ááá¯áá±á¬ááẠHTTP/1.1 á á¡áááááŒá¿áá¬áá»á¬ážááᯠááŒá±ááŸááºážáááºá¡ááœáẠáá®ááá¯ááºážáá¯ááºáá¬ážááŒá®áž áá áºáá»áááºáááºážááœáẠáá±á¬ááºááŒááºááá¯ááºáááºááŸá¯ááᯠááááºážááááºážáá¬ážááẠááá¯á¡ááºáááºá 2015 áá¯ááŸá áºááœáẠIETF á¡áá¯ááºá¡ááœá²á·ááẠSPDY áááá¯ááá¯áá±á¬ááᯠá¡ááŒá±áá¶á HTTP/2 áááºááŸááºáá»ááºááᯠááááºáááºáá²á·áááºá á€áááºááŸá¬ HTTP/2 á ááŒá¬ážáá¬ážáá»ááºáá»á¬ážááŒá áºááẠá
- ááœáá¡ááŸááºá ááºá
- áá áºáá¯áááºážáá±á¬ TCP áá»áááºáááºááŸá¯ááœáẠHTTP áá±á¬ááºážááá¯áá»ááºáá»á¬ážá áœá¬ááᯠáá±á«ááºážááá·áºááŒááºážá
- áá¬áá¬ááᯠáá±á¬ááºá Ạ(WebSocket ááá«áá²) á០ááœááºážáá¯ááºáá«á
áááá¯ááá¯áá±á¬ááẠááŸá±á·ááá¯á· ááŒá±ááŸááºážááŒá®ážááŸááºážáá²á·áááºá áá°á ááŒááºážááŒááºážáááºáááº
ááá¯á·áá±á¬áºá multiplexing ááẠáá±á¬ááºáááºáá±á¬á·áá»ááºááŒá¿áá¬áá
áºáá¯áá®ááá¯á· áŠážáááºáááºá áá»áœááºá¯ááºááá¯á·ááẠáá¬áá¬áá
áºáá¯ááá¯á· áá±á¬ááºážááá¯áá»áẠ5 áá¯ááᯠáááŒáá¯ááºáááºážáá¯ááºáá±á¬ááºáá±áááºáᯠááŒááºáá±á¬ááºááŒáá·áºáá«á HTTP/2 ááá¯á¡áá¯á¶ážááŒá¯ááá·áºá¡áá«á á€áá±á¬ááºážááá¯áá»ááºá¡á¬ážáá¯á¶ážááᯠáá°áá®áá±á¬ TCP áá»áááºáááºááŸá¯á¡ááœááºáž áá¯ááºáá±á¬ááºááœá¬ážáááºááŒá
áºááŒá®áž ááá¯ááá¯áááºááŸá¬ áá±á¬ááºážááá¯áá»ááºáá
áºáá¯á០á¡á
áááºá¡ááá¯ááºážáá
áºáᯠáá»á±á¬ááºáá¯á¶ážááœá¬ážáá«á ááá¯á·ááá¯áẠáááŸááºáááẠáááºáá¶áááŸááá«áá áá¯á¶ážááŸá¯á¶ážááœá¬ážááá·áºá¡ááá¯ááºážá¡áá áá±á¬ááºážááá¯áá»ááºáá»á¬ážááŸáá·áº áá¯á¶á·ááŒááºááŸá¯áá»á¬ážá¡á¬ážáá¯á¶ážááᯠáá±ážááá¯á·ááŒááºážááŸá¬ áááºááœá¬ážáááºááŒá
áºáááºá ááŒááºáááºááááºážáááºážáá²á·áááºá áá»áááºáááºááŸá¯á¡áááºá¡ááœá±áž ááá¯ááá¯ážáá±á HTTP/2 ááŸá±ážáá± á¡áá¯ááºáá¯ááºáááºá
á€ááŒá¿áá¬ááᯠ"head-of-line blocking" áá¯áá±á«áºááŒá®áž áá¶ááá±á¬ááºážá
áœá¬ááŒáá·áºá TCP ááá¯á¡áá¯á¶ážááŒá¯ááá·áºá¡áá« áááºážááá¯ááŒá±ááŸááºážáááºáááŒá
áºááá¯ááºáá«á
Daniel Steinberg á ááá¯ááºáá±á¬áºáá¯á¶
ááááºá¡áá±ááŒáá·áº HTTP/2 á á¶áááºááŸááºáá»ááºá developer áá»á¬ážááẠáá±á¬ááºážááœááºáá±á¬á¡áá¯ááºáá»á¬ážááᯠáá¯ááºáá±á¬ááºáá²á·ááŒá®áž OSI áá±á¬áºáááºá á¡ááá®áá±ážááŸááºážá¡ááœáŸá¬ááœáẠáá¯ááºáá±á¬ááºááá¯ááºááá·áº á¡áá¬á¡á¬ážáá¯á¶ážáá®ážáá«ážááᯠáá¯ááºáá±á¬ááºáá²á·áááºá áááºáá°ááá¯á·áá±á¬ááºáá±ážá¡ááœáŸá¬ááá¯á·áááºážááŒá®áž áááºáá°ááá¯á·áá±á¬ááºáá±ážáááá¯ááá¯áá±á¬á¡áá áºáá áºáá¯ááᯠáá®ááœááºááẠá¡áá»áááºáááºááŒá®á
áá»áœááºá¯ááºááá¯á·ááẠáááá¯ááá¯áá±á¬á¡áá áºáá áºáᯠááá¯á¡ááºáááº- UDP ááŸáá·áº TCP
áááºáá°ááá¯á·áá±á¬ááºáá±ážá¡ááœáŸá¬áááá¯ááá¯áá±á¬á¡áá áºááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááẠááá±á·áá±ááºáááºááœá±á·á¡ááŒá±á¡áá±áá»á¬ážááœáẠáááŒá áºááá¯ááºáá±á¬á¡áá¯ááºáá áºáá¯ááŒá áºááŒá±á¬ááºáž áá»ááºááŒááºá áœá¬ áááá¬áá¬áááºá á¡ááŸááºááŸá¬ áá¬á·ááºáá² ááá¯á·ááá¯áẠá¡áááºá¡áááºáá±á¬ááºá áºáá»á¬áž (routerá firewallsá NAT áá¬áá¬áá»á¬áž ...) ááẠáááºáá°ááá¯á·áá±á¬ááºáá±ážá¡ááœáŸá¬á¡ááŒá±á¬ááºáž ááááŒá®áž áááºážááá¯á·á¡á¬áž á¡áá áºá¡áááºážáá áºáá¯áᯠáááºáá±ážááŒááºážááẠá¡ááœááºáááºáá²áá±á¬ á¡áá¯ááºááŒá áºáááºá ááá¯á·á¡ááŒááºá áááºáá°ááá¯á·áá±á¬ááºáá±ážáááá¯ááá¯áá±á¬áá»á¬ážá¡ááœáẠáá¶á·ááá¯ážááŸá¯ááẠáááºáááºááŸá¯á áá áºáá»á¬ážá áá¬áááºááœáẠáááºáá±á¬ááºáá¬ážááŒá®áž kernels áá»á¬ážáááºáááºáž ááŒá±á¬ááºážáá²ááẠááá¹ááááŸááá±á
ááŒá®ážáá±á¬á· áá®áá±áá¬ááŸá¬ áá áºáá±á¬ááºáá±á¬ááºá áááºááŒáŸá±á¬ááºááŒá®ážááŒá±á¬ááá¯ááºááẠ"áá¯ááºáá«áááºá áá«ááá¯á·á HTTP/3 ááᯠáŠážá á¬ážáá±ážááŒá®áž ááá¯áá±áá±ážá á¬ážááŸá¯ááœá±áá²á· áá®ááœááºáááá·áºáááºá áá«áá±ááá·áº á¡áá±á¬ááºá¡áááºáá±á¬áºááá¯á· 10-15 ááŸá áºáá±á¬áẠá¡áá»áááºáá°ááááá·áºáááºá á¡á á¬ážááá¯ážáááº)â á ááá¯á·áá±á¬áºáá±á¬ááºáááºáá áºáá¯ááŸááá±ážáááºááá¯ááºáá±á¬ááŒá±á¬áá·áºáááá¬áááºááŸá¬ážáá±á¬ááœá±ážáá»ááºááŸá¯ááẠUDP áááá¯ááá¯áá±á¬ááá¯á¡áá¯á¶ážááŒá¯áááºááŒá áºáááºá áá¯ááºáááºá áá¯ááºáááºá ááá¯ážáááºáá»á±á¬áºááŸá±á¬ááºážááá¯ááºážáá²á· XNUMX á¡á á±á¬ááá¯ááºážááœá±ááŸá¬ LAN ááŸá¬ ááá¯ááºááœá±ááᯠááœáŸáá·áºáá áºáá²á·áá²á· áá°áá®áá²á· áááá¯ááá¯áá±á¬á ááá±á·áá±áẠáá¬á·ááºáá²á¡á¬ážáá¯á¶ážáá®ážáá«ážááẠáááºážááŸáá·áºá¡áá¯ááºáá¯ááºááá¯ááºáááºá
TCP ááẠUDP á á¡á¬ážáá¬áá»ááºáá»á¬ážáá¬áž á¡áááºáááºážá ááááŠážá áœá¬á áá»áœááºá¯ááºááá¯á·ááœáẠáá¬á·ááºáá²á¡ááŒá±á¬ááºáž ááááá·áº áááºáá°ááá¯á·áá±á¬ááºáá±áž á¡ááœáŸá¬á¡ááá¯ááºáž áááŸááá«á áááºážááẠáá»áœááºá¯ááºááá¯á·á¡á¬áž á¡áá¯á¶ážááŸááºáá»á¬ážáá±á«áºááŸá session ááᯠááá¯ááºááá¯ááºáá¯á¶ážááŒááºááá¯ááºááŒá®áž ááá¯áá±áá¬ááœáẠáááááá¹ááá»á¬ážááᯠááŒá±ááŸááºážááá¯ááºá á±áá«áááºá ááá¯ááá¯áááºááŸá¬á áá»áœááºá¯ááºááá¯á·ááẠ(TCP ááœááºáá²á·ááá¯á·) session áá áºáᯠááá¯á·ááá¯áẠá¡áá»á¬ážá¡ááŒá¬ážááœáẠá¡ááá·áºá¡áááºáááŸááá±á¬áºáááºáž áááºážááá¯á·ááᯠáá»áœááºá¯ááºááá¯á· ááá¯á¡ááºááá±á¬áẠáááºáá®ážááá¯ááºáááºá áá¯áááá¡áá»ááºááŸá¬ UDP ááŸáá áºááá·áº áá±áá¬áá±ážááá¯á·ááŒááºážááẠTCP ááẠááá¯ááá¯ááŒááºáááºáááºá ááá¯á·ááŒá±á¬áá·áºá áá®á¡áá¯áá®á¡á HTTP/2 ááœááºáááŸááá¬ážáá±á¬ áááºááŸáááŒááºááŸá¯ááºážáá»ááºááŸá¬áá»ááºááᯠááŒááºáá»á±á¬áºááá¯ááºáá«áááºá
ááá¯á·áá±á¬áºáááºáž UDP ááẠáá¯á¶ááŒááºá áááºáá»ááá±á¬ áá±áá¬áá±ážááá¯á·ááŒááºážááᯠá¡á¬áááá¶ááá¯ááºáá«á á¡ááŸááºáá±á¬á·á áá»áœááºá¯ááºááá¯á·ááẠáá¯ááºááá¯ážááŸá¯áá»á¬ážááᯠááá¯ážááŸááºážá áœá¬ áá±ážááá¯á·áá±ááŒá®áž á¡ááŒá¬ážáá áºáááºá០áááºážááá¯á·ááᯠáááºáá¶áááŸááááºáᯠáá»áŸá±á¬áºááá·áºáá«áááºá áááá°ážáá¬áž? áá¶ááá±á¬ááºážá áœá¬áá²... áááºážááẠáá°ááŒá®ážáá»á¬ážá¡ááœáẠáá®áá®ááá¯áá»á¬áž áá¯ááºááœáŸáá·áºááẠáá¯á¶áá±á¬ááºáááºá ááá¯á·áá±á¬áº ááá¯ááá¯áá±ážáááºáá±á¬ á¡áá¬áá»á¬ážá¡ááœáẠáááºááẠáá¯á¶ááŒááºá áááºáá»áááŸá¯ ááá¯á¡ááºáááºá ááá¯ááá¯áááºááŸá¬ áááºááẠUDP áááááºááœáẠá¡ááŒá¬ážá¡áá¬áá áºáá¯ááᯠááŒá¯á¶áá¬ážááááºáᯠááá¯ááá¯áá«áááºá
HTTP/2 áá²á·ááá¯á·áááºá 2012 áá¯ááŸá
áºááœáẠGoogle ááœáẠáááá¯ááá¯áá±á¬á¡áá
áºáááºáá®ážááŒááºážááá¯ááºáᬠá¡áá¯ááºá
áá¯ááºáá²á·áááºá ááá¯ááá¯áááºááŸá¬ SPDY ááœáẠá¡áá¯ááºá
áááºááá·áºá¡áá»áááºááŸáá·áº á¡áá°áá°áááºááŒá
áºáá«áááºá 2013 áá¯ááŸá
áºááœáẠJim Roskind ááẠáá°á¡áá»á¬ážá¡á¬áž áááºááŒáá²á·áááºá
QUIC ááá¯áá¬áá¬áá²
ááááŠážá
áœá¬á áá±á¬áºááŒáá¬ážááŒá®ážááŒá
áºááá·áºá¡ááá¯ááºážá á€á¡áá¬ááẠUDP áááŒá¯á¶áá¯á¶áá¯á¶ážáááºáá»ááºááŒá
áºáááºá QUIC áá»áááºáááºááŸá¯ááẠUDP áááááºááœáẠáááºáá¬áááºá áááºážááœáẠHTTP/2 ááŸáá·áº ááŸááºááœá²á á
ááºážáá»á±á¬ááºážáá»á¬ážá
áœá¬ áááºááŸáááá¯ááºáááºá á€á
á®ážááŒá±á¬ááºážáá»á¬ážááẠá¡áá¯á¶ážááŸááºáá»á¬ážááœááºáᬠáááºááŸáááŒá®áž áá®ážááŒá¬ážáááºáá±á¬ááºááŸá¯áá±ážáá«áááºá áá±áá¬á
á®ážááŒá±á¬ááºážáá
áºáá¯ááœáẠáááºáááºáá¯á¶ážááŸá¯á¶ážááŸá¯áá
áºáᯠááŒá
áºáá±á«áºáá«áá áááºážááẠá¡ááŒá¬ážáá°áá»á¬ážááᯠááááá¯ááºáááºááá¯ááºáá«á
Daniel Steinberg á ááá¯ááºáá±á¬áºáá¯á¶
áá¯áááá¡áá±ááŸáá·áºá áá¯ááºááŸááºááŒááºážá¡á¬áž áá®ážááŒá¬ážá¡ááá·áºááœáẠá¡áá±á¬ááºá¡áááºááá±á¬áºáá±á¬á·áá² áááá¯ááá¯áá±á¬ááœáẠááá·áºááœááºážáá¬ážáááºá áááºážááẠááá·áºá¡á¬áž áááºááœá²ááŸá¯ááºáááºááŒááºážáá
áºáá¯áááºážááœáẠáá»áááºáááºááŸá¯áá
áºáá¯ááŸáá·áº á¡áá»á¬ážáá°ááŸá¬áá±á¬á·áá»á¬ážááᯠáá²ááŸááºááá¯ááºá
á±ááŒá®áž áááá¹áá¬áá«ážáááºáá±á¬ 0-RTT áááºááœá²ááŒááºážááá¹ááá¬ážááᯠá¡áá¯á¶ážááŒá¯áááºááŸáá·áº áááºááœá²ááŸá±á¬áá·áºááŸá±ážááŸá¯áá»á¬ážááᯠáá¯á¶ážáááŸá±á¬ááºááŸá¬ážááá¯ááºá
á±áááºááŒá
áºáááºá ááá¯á·á¡ááŒááºá ááá¯á¡áá« áá
áºáŠážáá»ááºážá
á®áá±áá¬áááºáá±á·ááºá»áá»á¬ážááᯠá
á¬ááŸááºáá¬ážááá¯ááºáá«ááŒá®á áááºážááẠáá¯ááºááœáŸáá·áºááŸá¯á០áá±áá¬áááºáá¶áááŸáááŸá¯ ááŒá®ážá
á®ážááŸá¯ááᯠáá
á±á¬áá·áºáá² áááºáá¶áááŸááá¬ážáá±á¬ áááºáááºáá»á¬ážááᯠááœááºáááºá
áœá¬ áá¯ááºááŸááºááẠááœáá·áºááŒá¯áááºá á€áá¯ááºáá±á¬ááºáá»ááºááẠáá±áá¯áá»á¡á¬ážááŒáá·áº TCP ááœáẠáááŒá
áºááá¯ááºáá±á¬ááŒá±á¬áá·áºááŒá
áºáááºá TLS ááŸáá·áº TCP ááẠáá
áºáá¯ááŸáá·áºáá
áºáᯠáá®ážááŒá¬ážáá¯ááºáá±á¬ááºáá²á·ááŒá®áž TLS ááẠáááºááá·áºá¡ááá¯ááºážáá»á¬áž TCP áá±áá¬ááᯠááŒááºáá±á¬ááºáááºááᯠáááááá¯ááºáá«á ááá¯á·ááŒá±á¬áá·áºá TCP á¡ááá¯ááºážáá»á¬ážááᯠáá
áºáá¯ááŸáá·áºáá
áºáᯠá¡á¶áááºááœááºáá»ááŒá
áºá
á±ááẠáááºážáá¡ááá¯ááºážáá»á¬ážááᯠáááŒááºáááºááá¯ááºáá² ááœááºáááºá
áœá¬ á
á¬ááŸááºáá¬ážááá¯ááºáááºááŒá
áºáááºá á€ááá¯ážáááºááŸá¯áá»á¬ážá¡á¬ážáá¯á¶ážááẠTCP ááŸáá·áº ááŸáá¯ááºážááŸááºáá«á á
á±á¬áá·áºááá¯ááºážáá±áá»áááºááᯠáá»áŸá±á¬á·áá»ááẠQUIC ááᯠááœáá·áºááŒá¯áá«áááºá
ááááá¡áá±ááŒáá·áºá á¡áááºážááœáŸáá·áºááŒááºážáááá±á¬ááá¬ážááẠááá·áºá¡á¬áž áá¯á¶ážá
áœá²áá°á IP ááááºá
á¬á០áá»áááºáááºááŸá¯ááᯠááŒááºáá±á¬ááºááá¯ááºá
á±áá«áááºá á¥ááá¬á¡á¬ážááŒáá·áºá client ááẠWi-Fi access point áá
áºáá¯á០á¡ááŒá¬ážáá
áºáá¯ááá¯á· ááŒá±á¬ááºážááá·áºá¡áá« áááºážá IP ááá¯ááŒá±á¬ááºážááá·áºá¡áá« áááºážááẠá¡áá±ážááŒá®ážáá«áááºá á€ááá
á¹á
ááœááºá TCP ááá¯á¡áá¯á¶ážááŒá¯ááá·áºá¡áá«á ááŸáááŒá®ážáá¬áž TCP áá»áááºáááºááŸá¯áá»á¬áž á¡áá»áááºáá¯ááºááœá¬ážáᬠIP á¡áá
áºáá
áºáá¯á០áá»áááºáááºááŸá¯á¡áá
áºáá»á¬ážááᯠáááºáá®ážááá·áºáá¬áááœáẠááŸááºáá»á¬ážáá±á¬áá¯ááºáááºážá
ááºáá
áºáᯠááŒá
áºáá±á«áºáá«áááºá QUIC ááá
á¹á
ááœááºá client ááẠstream ID á¡áá±á¬ááºážááŒáá·áº IP á¡áá
áºáá
áºáá¯á០server ááá¯á· packets áá»á¬ážááᯠáááºáááºáá±ážááá¯á·áá±áá«áááºá áá¬ááŒá
áºááá¯á·áá²ááá¯áá±á¬á· ááá¯ááºááá¯ááºáá¯ááºááœáŸáá·áºááŸá¯ ID ááẠááá¯áá°ážááŒá¬ážááŒá®áž ááŒááºáá¯á¶ážááŒááºážáááŒá¯áá±á¬á·áá²á client ááẠIP ááá¯ááŒá±á¬ááºážáá¬ážááŒá®ážá áá»á±á¬ááºáá¯á¶ážááœá¬ážáá±á¬ packet áá»á¬ážááᯠááŒááºáááºáá±ážááá¯á·ááŒá®áž ááááºá
á¬á¡áá
áºááœáẠáááºááœááºááŸá¯ááᯠáááºáááºáá¯ááºáá±á¬ááºááŒá±á¬ááºáž áá¬áá¬á០áá¬ážáááºáááºá
á áá¯áá¹áá QUIC ááẠáááºáááºááŸá¯á áá áºá¡ááá·áºááá¯ááºáá² áá»áŸá±á¬ááºááœáŸá¬á¡ááá·áºááœáẠá¡áá±á¬ááºá¡áááºáá±á¬áºáááºá áá áºáááºááœááºá áááºážááẠáááá¯ááá¯áá±á¬ááᯠáá»ááºááŒááºá áœá¬ ááŒá±á¬ááºážáá²ááŸá¯áá»á¬áž ááŒá¯áá¯ááºááá¯ááºáá±á¬ááŒá±á¬áá·áº ááŒá áºáááºá á¡ááºááááºáá áºáá¯ááááºá OS áá¬ážááŸááºážá¡áá áºááᯠá á±á¬áá·áºáááá·áºá¡á á¬áž á á¬ááŒáá·áºááá¯ááºááᯠá¡ááºááááºáá¯ááºáááºáá¬ááá¯áááºá á¡ááŒá¬ážáá áºáááºááœááºá áááºážááẠáááá¯áááºáá¬áá¯á¶ážá áœá²ááŸá¯ááᯠá¡á¬ážáá±á¬ááºážá á±áááºá
áá±á¬ááºáá¯á¶ážáá±á¬á· áá±á«ááºážá
ááºážááœá±á header compression ááẠQUIC ááŸáá·áº gQUIC á¡ááŒá¬áž ááœá²ááŒá¬ážááá·áº á¡áá¬áá»á¬ážáá²á០áá
áºáá¯ááŒá
áºáááºá áá«ááᯠá¡áá»áááºá¡áá»á¬ážááŒá®áž áá±ážááá²á·á¡áá»ááºááᯠáá»áœááºáá±á¬áº áááŒááºáá«áá°ážá á
á¶áááºááŸááºáá»ááºá¡ááœáẠáááºááŒáá¬ážáá²á· áá¬ážááŸááºážááŸá¬á header compression ááᯠHTTP/2 ááŸá¬ header compression áá²á· áááºááá¯ááºááá»áŸ áááºáá°áááºááá¯á·áá² ááŒá±á¬áá»ááºáá«áááºá á
á¬áá»á¬ážáá»á¬ážáááºááá¯á·ááááºá
áááºáá±á¬ááºááŒááºáá²
áááºáá²á·áá±ážááœááºážáá«á ááááºáá±á¬á· á
á¶ááŸá¯ááºážáá
áºáᯠáááŸááá±ážáááœá±á· ááá¯ááºážáá¬á
áᬠáá¬á០áá°ážáá°ážááŒá¬ážááŒá¬áž áááŸááá«áá°ážá 2013 ááŸáá·áº 2016 ááœáẠgQUIC ááá¯á¡áá¯á¶ážááŒá¯áá²á·ááá·áº Google ááŸá
á¬áááºážá¡ááºážáá»á¬ážáá¬ááŒá
áºááá¯ááºáááºá
2017 áá¯ááŸá
áºááœáẠArash Molavi Kakhki áŠážáá±á¬ááºáá±á¬ áá¯áá±áá®á¡ááœá²á·á០áá¯ááºáá±áá²á·áááºá
áá±á·áá¬ááŸá¯ááẠgQUIC á á¡á¬ážáááºážáá»ááºáá»á¬ážá
áœá¬ááŒá
áºááá·áº ááœááºáááºáááºáá±á·ááºá»áá»á¬áž áá±á¬ááŸá±á¬ááŒááºážá¡ááœáẠááááºáááŒáááºááŒá
áºááŸá¯á áá±á¬áááŒá®ážááŸá¯ (áááá¬ážááŸá¯) áá»ááºáááºáááºážáááºááŸáá·áº áá±ážáááºáá±á¬ (10 kb á¡áá) á¡áá¬ááá¹áá¯áá»á¬ážááᯠááœáŸá²ááŒá±á¬ááºážááŸá¯ ááŸá±ážááœá±ážá
á±ááŒááºážá
ááá·áº áá±á·áá¬ááŸá¯á áá±á¬áºááŒáá²á·áááºá ááá¯á·áá±á¬áº áá±á¬ááºááá¯ááºážááœáẠ0-RTT ááᯠá¡áá¯á¶ážááŒá¯á áá»á±á¬áºááŒá±ážáá±ážááá¯ááºáááºá áá±á·áá¬áá²á·ááá·áº á¡ááŒá¬ážááá
á¹á
áá»á¬ážá¡á¬ážáá¯á¶ážááœááºá gQUIC ááẠTCP ááŸáá·áº ááŸáá¯ááºážááŸááºáá«á á¡ááŸáááºááŒáá·áºáááºáá¬ááŒá±á¬ááºáž ááŒááá²á·áááºá á€áá±áá¬ááœáẠáá®ážááŒá¬ážáá¶áá«ááºáá»á¬ážá¡ááŒá±á¬ááºáž ááŒá±á¬ááẠáááºáá²áááºá áááºááᬠááá¯áá±á¬ááºážáá«áááºá
á€áá±áá¬ááœáẠá€áá±áá¬ááẠgQUIC ááŸáá·áº áááºáááºá á¡áá°ážááŒá±á¬áááẠááŒá áºááŒá®áž áááºážááẠá á¶ááŸá¯ááºážááᯠáá±á¬áºáá¯ááºááŒááºážá¡ááœáẠááááºááá¯ááºáá«á QUIC á¡ááœáẠáá¬ááŒá áºáááºáááºáž- áááºážááẠáá»áŸáá¯á·ááŸááºáá¬ážáá²ááŒá áºáááºá ááá¯á·áá±á¬áº gQUIC ááœáẠáá±á¬áºááŒáá¬ážáá±á¬ á¡á¬ážáááºážáá»ááºáá»á¬ážááᯠááá·áºááœááºážá ááºážá á¬ážááŒá®áž ááŒááºáá±ážáááºáᯠáá»áŸá±á¬áºááá·áºáá«áááºá
á¡áá¬áááºá¡áááºážáááº- HTTP/3 ááá±á¬á
ááá¯á·áá±á¬áº á€ááœáẠá¡áá¬á¡á¬ážáá¯á¶ážááẠááŒááºáááºááŒááºáá¬ážáá±áááº- API ááẠáááºááá·áºáááºážááŸáá·áºáá»áŸ ááŒá±á¬ááºážáá²áááºááá¯ááºáá«á á¡áá¬á¡á¬ážáá¯á¶ážááẠHTTP/2 ááœááºááŸáááá²á·ááá¯á· á¡ááá¡áá»áá°áá®áá±áááºááŒá áºáááºá áá±á¬ááºážááŒá®á API ááẠáá°áá®áá±áá«áá HTTP/3 ááá¯á· áá°ážááŒá±á¬ááºážááŒááºážááẠQUIC áááºáá°ááá¯á·áá±á¬ááºáá±ážááᯠáá¶á·ááá¯ážáá±ážááá·áº áá±á¬ááºááœááºááŸá á á¬ááŒáá·áºááá¯ááºá áá¬ážááŸááºážá¡áá áºááᯠá¡áá¯á¶ážááŒá¯ááŒááºážááŒáá·áº ááŒá±ááŸááºážááááºááŒá áºáááºá ááŸááºáá«áááºá á¡áááºááŒá±á¬áá·áºááá¯áá±á¬áº HTTP áá¬ážááŸááºážáá±á¬ááºážááœáẠáá¯ááºááœá¬ááŸá¯ááᯠá¡áá»áááºá¡áá±á¬áºááŒá¬á¡á±á¬áẠáá¬ážááŸáááááºááŒá áºáá«áááºá á¡ááºáá¬áááºááẠUDP ááá¯á· ááŒá®ážááŒáá·áºá á¯á¶áá±á¬ á¡ááœááºáá°ážááŒá±á¬ááºážááŸá¯á¡ááœáẠáá±á¬áá±á¬ááẠá¡áááºááá·áºáááŒá áºáá±ážáá«á
áááºáá°á áá±á¬ááºáá¶áá±ááŒá®áá²á
áá®ááŸá¬
áá¯ááºáá¯ááºááŒáá·áºáá»áááŸá¯ááœáẠáááºááŸáááœáẠááá±á¬ááºáá¬ááẠQUIC ááᯠáá¶á·ááá¯ážááá¬ážáá«á áááŒá¬áá±ážáá®á HTTP/3 á¡ááœáẠáá¶á·ááá¯ážáá°áá®ááŸá¯ááŸá¬ Chrome ááœáẠáá«áááºáá²á·áá±á¬áºáááºáž ááá¯á¡áá»áááºá¡áá Canary ááœááºáᬠááŸááá±áá«áááºá
áá±á¬ááºááœááºááŸá HTTP/3 ááá¯áᬠáá¶á·ááá¯ážáá±ážáááºá
ááŒá¿áá¬ááœá±á áá¬ááœá±áá²á
áááºááŸáá·áºáá»áœááºá¯ááºááẠáááºááœá±á·ááá¹áá¬ááœááºáá±ááá¯ááºááŒááŒá®ážá áááºááá·áºáááºážááá¬ááŒá®ážááŒá®ážáá¬ážáá¬ážá០áá¶ááá¯ááºáááºáááŸááá±á¬áá°áá»á¬ážáá¶áá±á¬ááºááŸáááá¯ááºááŒá®áž QUIC ááẠáá»áœááºážáá»ááºááá¯ááºáá«á
á¡áá±ážááŒá®ážáá¯á¶ážá¡áá»ááºááŸá¬ âhttps://â ááẠTCP port 443 ááá¯á· áŠážáááºááœá¬ážááá·áºá¡áá»ááºááá¯ááºáá±á¬á·ááŒá±á¬ááºáž ááá±á¬ááºáá¬á¡á¬áž áá áºáááºážáááºážááŒáá·áº ááŸááºážááŒááẠááá¯á¡ááºáá«áááºá TCP áá¯á¶ážááááŸáááá¯ááºáá«á áááºážá¡ááœáẠAlt-Svc áá±á«ááºážá á®ážááᯠá¡áá¯á¶ážááŒá¯áááºá áááºážááẠá€áááºááá¯ááºááᯠááá¯áá²á·ááá¯á·áá±á¬ áááá¯ááá¯áá±á¬ááŸáá·áº ááá¯áá²á·ááá¯á·áá±á¬ ááááºá á¬áá»á¬ážááœááºáááºáž á€áááºááá¯ááºááœáẠáááá¯ááºáááºáᯠááá±á¬ááºáá¬á¡á¬áž ááŒá±á¬ááŒááá¯ááºá á±áá«áááºá áá®á¡áá¯áá®á¡áá áááºážááẠáá»ááºááá±áá áºáá¯áá²á·ááá¯á· áá¯ááºáá±á¬ááºááá·áºáá±á¬áºáááºáž áááºááœá±á·ááœáẠDDoS ááá¯ááºááá¯ááºááŸá¯áá»á¬ážááá¯ááŸá±á¬ááºááŸá¬ážááẠá¥ááá¬á¡á¬ážááŒáá·áº UDP ááẠfirewall ááœááºáá¬ážááŒá áºáá¬ážááá¯ááºáááºáá°áá±á¬á¡áá»ááºááᯠáá»áœááºá¯ááºááá¯á·ááœá±á·áá¬ááááºááŒá áºáá«áááºá
UDP ááá¯áá¬ážááŒá
áºáá¬ážáá±á¬áºáááºážá client ááẠIP address ááŒáá·áº TCP session áá
áºáá¯áá»ááºážáááẠconfigure áá¯ááºáá¬ážááá·áº NAT router ááá±á¬ááºááœááºááŸááá±ááá¯ááºáááºá áá»áœááºá¯ááºááá¯á·ááẠáá¬á·ááºáá²á
ááºááŸááºáááŸááá±á¬ UDP ááá¯á¡áá¯á¶ážááŒá¯áááºá NAT ááẠáá»áááºáááºááŸá¯ááᯠááááºážáá¬ážáááºááá¯ááºáá«á ááŸáá·áº QUIC á
ááºááŸááºáá
áºáá¯ááŒá
áºáááºá
á€ááŒá¿áá¬áá»á¬ážá¡á¬ážáá¯á¶ážááẠUDP ááẠááááºáá¡ááºáá¬áááºá¡ááŒá±á¬ááºážá¡áá¬áá»á¬ážááᯠáá¯ááºááœáŸáá·áºáááºá¡áá¯á¶ážáááŒá¯áá²á·áá±á¬ááŒá±á¬áá·áºááŒá áºááŒá®ážá áá¬á·ááºáá²áá¯ááºáá¯ááºáá°áá»á¬ážá¡áá±ááŒáá·áº áááºážááẠáááºááá·áºá¡áá«áá»áŸááŒá áºáá¬áááºááᯠááŒáá¯áááááá¯ááºáá±á¬ááŒá±á¬áá·áºááŒá áºáááºá á¡áá¬ážáá°áááºá á á®áá¶ááá·áºááœá²áá°áá»á¬ážááẠQUIC á¡áá¯ááºááŒá áºáááºá¡ááœáẠáááºážááá¯á·áááœááºáááºáá»á¬ážááᯠáááºáá²á·ááá¯á· á áá áºááá»ááŒááºáááºáááºááŸááºááááºááᯠá¡ááŸááºááááºáá¬ážááááºáá±ážáá«á á€á¡ááŒá±á¡áá±ááẠáááŒááºážááŒááºážááŒá±á¬ááºážáá²ááœá¬ážáááºááŒá áºááŒá®áž áááºááá¯á·áááºááá¯á á±áá¬áá° á¡ááá¯áá«ááŒá±á¬ááºážáá²ááŸá¯áá»á¬ážááẠáááºáá°ááá¯á·áá±á¬ááºáá±ážá¡ááœáŸá¬áááá¯ááá¯áá±á¬á¡áá áºááᯠá¡áá±á¬ááºá¡áááºáá±á¬áºááŒááºážááẠá¡áá»áááºááá¯ááŒá¬áááºááŒá áºáááºá
ááá¯á·á¡ááŒááºá áá±á¬áºááŒáá¬ážááŒá®ážááŒá
áºááá·áºá¡ááá¯ááºáž QUIC ááẠCPU á¡áá¯á¶ážááŒá¯ááŸá¯ááᯠá¡ááœááºááá¯ážá
á±áááºá Daniel Stenberg
HTTP/3 áááºáá±á¬á·áá±á¬ááºáá¬ááá²á
á
á¶
áá±á¬ááºážááŒá®á Google ááẠáááºážá gQUIC á¡áá±á¬ááºá¡áááºáá±á¬áºááŸá¯ááᯠ2013 áá¯ááŸá
áºááááºážá á¡áá¯á¶ážááŒá¯áá²á·áááºá Google ááŸá¬ááœá±áá±ážá¡ááºáá»ááºááá¯á· áá±ážááá¯á·ááá·áº HTTP áá±á¬ááºážááá¯áá»ááºááᯠáááºááŒáá·áºááŸá¯áá«áá á€á¡áá¬ááᯠáááºááŒááºááááá·áºáááº-
ááœá±á·ááŸááá»ááºáá»á¬áž
ááᯠQUIC ááẠá¡ááá¯ááºá á¬ážááŒá áºáá±á¬áºáááºáž á¡ááœááºá¡áá¬ážá¡áá¬ááŸááá±á¬ áááºážááá¬áá áºáá¯áá²á·ááá¯á· ááŒá áºáá±áá«áááºá ááœááºáá²á·ááá·áºááŸá Ạ20 áá»á±á¬áºá¡ááœááºážá áááºáá°ááá¯á·áá±á¬ááºáá±ážá¡ááœáŸá¬áááá¯ááá¯áá±á¬áá»á¬ážá ááá¯ááá¯áá±á¬ááºážááœááºá¡á±á¬ááºáá¯ááºáá±á¬ááºááŸá¯á¡á¬ážáá¯á¶ážááẠááá á¹á á¡áá»á¬ážá á¯ááœáẠá¡áá±á¬ááºážáá¯á¶ážá áœááºážáá±á¬ááºáááºááŸáááá·áº TCPá QUIC ááá¯á·ááᯠá¡áááá¡á¬ážááŒáá·áº áááºááá¯ááºáááºááŸá¬ á¡ááœááºáá±á¬ááºážááœááºáá±ááŒá®ááŒá áºáááºá
ááá¯á·áá±á¬áºáááºáž áá¬ááá·áºááŸá áºá¡áááºážáááºá¡ááœááºáž ááŒá±ááŸááºážáááá·áº ááŒá¿áá¬áá»á¬áž ááŸááá±áá±ážáááºá áááºáá°áá»áŸ ááœááºážáá¶ááœááºážáá¶ááŒááºážááᯠáááŒáá¯ááºáá±á¬ áá¬á·ááºáá²áá»á¬áž áá«áááºáá±ááŒááºážááŒá±á¬áá·áº áá¯ááºáááºážá áẠááŸá±á¬áá·áºááŸá±ážááá¯ááºáá±á¬áºáááºážá áááºááá¯á·áááºááá¯á á±áá¬áá°á ááŒá¿áá¬á¡á¬ážáá¯á¶ážááẠá¡áá±á¬áºáá±áž ááŒá±ááŸááºážááá¯ááºáá¯á¶áááŒá®áž áááŒá¬áá® ááá¯á·ááá¯áẠáá±á¬ááºááá¯ááºážááœáẠáá»áœááºá¯ááºááá¯á·á¡á¬ážáá¯á¶áž HTTP/3 ááŸááá«áááºá
á¡áá¬áááºááẠáá®ážáá®ážáá±ážáááºá
source: www.habr.com