7 рдЕрдХреНрдЯреВрдмрд░, 2019 рдХреЛ, рдкреЛрд░реНрдЯрд╕реНрд╡рд┐рдЧрд░ (рдмрд░реНрдкрд╕реБрдЗрдЯ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛) рдХреЗ рдЕрдиреБрд╕рдВрдзрд╛рди рдирд┐рджреЗрд╢рдХ рдиреЗ HTTP рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рддрд╕реНрдХрд░реА рдХреЗ рдирдП рддрд░реАрдХреЛрдВ рдкрд░ рдПрдХ рдЕрдзреНрдпрдпрди рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ред рдЙрдирдХреА рдорджрдж рд╕реЗ, рдЙрд╕рдиреЗ рдмрдЧрдмрд╛рдЙрдВрдЯ рдкрд░ $ 70,000 рдХрдорд╛рдПред рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рд╣рдо рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рд╣рдорд▓реЗ, рдЙрдкрдХрд░рдг, рдФрд░ рдЙрди рд╡реЗрдм рд╕рд░реНрд╡рд░реЛрдВ рдкрд░ рд╢реЛрдз рдХрд░рдиреЗ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдЬреЛ рдЗрд╕ рднреЗрджреНрдпрддрд╛ рдХреА рдЪрдкреЗрдЯ рдореЗрдВ рд╣реИрдВред
HTTP рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рд╕реНрдордЧрд▓рд┐рдВрдЧ рдХреНрдпрд╛ рд╣реИ
HTTP рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рд╕реНрдордЧрд▓рд┐рдВрдЧ - рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рдлреНрд░рдВрдЯ рдФрд░ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рдмреИрдХреЗрдВрдб рдХреЛ рд╡рдВрд╢рд╛рдиреБрдХреНрд░рдо рдореЗрдВ рд▓рд╛рдиреЗ рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реЗ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдПрдХ рд╣рдорд▓рд╛, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╣рдорд▓рд╛рд╡рд░ рдлреНрд░рдВрдЯрдПрдВрдб рд╕рд░реНрд╡рд░ рд╕реЗ рдкрд┐рдЫрд▓реЗ рдПрдХ рдПрдЪрдЯреАрдЯреАрдкреА рдЕрдиреБрд░реЛрдз рдХреЛ рд╕реНрдордЧрд▓ рдХрд░ рд╕рдХрддрд╛ рд╣реИред рдореВрд▓ рд▓реЗрдЦ рд╕реЗ рдЪрд┐рддреНрд░ рдПрдХ рдЕрдЪреНрдЫреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ:

рдЗрд╕ рддрд░рд╣ рдХреЗ рд╣рдорд▓реЗ рд╕реЗ рдХрдИ рдкрд░рд┐рдгрд╛рдо рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ - рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд╕рддреНрд░ рдореЗрдВ рдПрдХреНрд╕рдПрд╕рдПрд╕ рдХреА рд╢реБрд░реВрдЖрдд, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рддреАрд╕рд░реЗ рдкрдХреНрд╖ рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рдкреБрдирд░реНрдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдирд╛, рд╕рд░реНрд╡рд░ рдХреИрд╢ рдХреЛ рдЬрд╣рд░ рджреЗрдирд╛, рдПрд╕рдПрд╕рдЖрд░рдПрдл рдХреА рд╕рдорд╛рдирддрд╛, рдФрд░ рдХрдИ рдЕрдиреНрдпред
2019 рдХреЗ 2019 рдХреЗ рд╕реНрдордЧрд▓рд┐рдВрдЧ рдЕрд╡рддрд╛рд░ рдореЗрдВ, рдЬреЗрдореНрд╕ рдХреЗрдЯрд▓ рдиреЗ рдЧрд▓рдд рд╡реЗрдм рд╕рд░реНрд╡рд░ рд╣реЗрдбрд░ рдкреНрд░реЛрд╕реЗрд╕рд┐рдВрдЧ рдХрд╛ рд╢реЛрд╖рдг рдХрд┐рдпрд╛
Transfer-Encoding: chunked
рдпрд╣ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ рдХрд┐ рд╕рдВрджреЗрд╢ рдирд┐рдХрд╛рдп рдХреЛ рднрд╛рдЧреЛрдВ ( RFC ) рдореЗрдВ рдкреНрд░реЗрд╖рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рдХрд┐ рдХреБрдЫ рд╡реЗрдм рд╕рд░реНрд╡рд░ chunked рдЯреНрд░рд╛рдВрд╕рдорд┐рд╢рди рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рд╣реЗрдбрд░ рдХреЛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд╕рдВрднрд╛рд▓рддреЗ рд╣реИрдВ, рдлреНрд░рдВрдЯрдПрдВрдб рдХреЗрд╡рд▓ рдПрдХ рдЕрдиреБрд░реЛрдз рдХреЛ "рджреЗрдЦреЗрдЧрд╛" рдФрд░ рдмреИрдХрдПрдВрдб рдЗрд╕реЗ рджреЛ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рдЪрд╛рди рд▓реЗрдЧрд╛ред рд╣рдорд▓реЗ рдХреЗ рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдореВрд▓ рд▓реЗрдЦ рдореЗрдВ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдПрдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдХрд╛рд░реНрдп рднреА рд╣реИ рдЬрд┐рд╕ рдкрд░ рдЖрдк рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рднреЗрджреНрдпрддрд╛ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрднреНрдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рддреНрд╡рд░рд┐рдд рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП, рдЬреЗрдореНрд╕ рдиреЗ рдмрд░реНрдкрд╕реВрдЯ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреНрд▓рдЧ-рдЗрди рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛, рдЬреЛ рдЗрдирдкреБрдЯ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд╕реЗрд╡рд╛ рдХреА рднреЗрджреНрдпрддрд╛ (рдпрджрд┐ рдХреЛрдИ рд╣реЛ) рдкрд░ рдПрдХ рдиреЛрдЯ рдмрдирд╛рддрд╛ рд╣реИред
рдХрдордЬреЛрд░ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг
рдореБрдЭреЗ рдХрд╣рдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рддрд╕реНрдХрд░реА рдФрд░ рдЕрдиреНрдп рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХреА рд╕рдорд╕реНрдпрд╛ рд▓рдВрдмреЗ рд╕рдордп рд╕реЗ рдПрдХ рдЕрдиреНрдп рд╢реЛрдзрдХрд░реНрддрд╛ рдиреЗ рдЙрдкрдирд╛рдо рд░реЗрдЬрд┐рд▓реЛ рдХреЗ рддрд╣рдд рдирд┐рдкрдЯрд╛ рджреА рд╣реИ ред рдкрд┐рдЫрд▓реЗ рддреАрди рд╡рд░реНрд╖реЛрдВ рдореЗрдВ, рдЙрдиреНрд╣реЛрдВрдиреЗ рддреАрди рд▓реЗрдЦ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдП рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдЙрдиреНрд╣реЛрдВрдиреЗ рд▓реЛрдХрдкреНрд░рд┐рдп рд╡реЗрдм рд╕рд░реНрд╡рд░реЛрдВ рдореЗрдВ рдкрд╛рдИ рдЧрдИ рдХрдордЬреЛрд░рд┐рдпреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛ рдордзреНрдпрдо рдФрд░ рдЙрдЪреНрдЪ рдЬреАрд╡рдирд╢реИрд▓реА рд╕реАрд╡реАрдИ рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рд╣реИред рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рд╕рд░реНрд╡рд░реЛрдВ рдореЗрдВ рдЕрдкрд╛рдЪреЗ рдЯреНрд░реИрдлрд┐рдХ рд╕рд░реНрд╡рд░, рдЬреЗрдЯреНрдЯреА, рдЕрдкреНрд╕рд┐рд╕ рд╣реИрдВред
рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рд░реБрдЪрд┐ рдХреЗ рдорджреНрджреЗрдирдЬрд░, рдПрдХ рдЕрдиреНрдп рд╢реЛрдзрдХрд░реНрддрд╛, рдирд╛рдерди рдбреЗрд╡рд┐рд╕рди рдиреЗ HAProxy рдореЗрдВ рдПрдХ рднреЗрджреНрдпрддрд╛ рдХреА рдЦреЛрдЬ рдХреА , рдЬрд┐рд╕рдиреЗ рдПрдХ рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЧрдард┐рдд рд╣реЗрдбрд░ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛ред
Transfer-Encoding:[\x0b]chunked
рдФрд░ рдЗрд╕реЗ рдирд┐рдореНрди рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рджрд┐рдпрд╛:
Transfer-Encoding: chunked
рд▓реЗрдХрд┐рди рдмреИрдХрдПрдВрдб рд╕рд░реНрд╡рд░ - gunicorn, рдлреНрд▓рд╛рд╕реНрдХ рдкрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕рдореНтАНрдорд┐рд▓рд┐рдд рдХрд░рддреЗ рд╣реБрдП, рд╣реЗрдбрд░ рдкрдврд╝рддреЗ рд╣реИрдВ, рдЬреЛ рднреЗрджреНрдпрддрд╛ рдХреЛ рднрдбрд╝рдХрд╛рддрд╛ рд╣реИред
рдереЛрдбрд╝реА рджреЗрд░ рдмрд╛рдж, рдХрдИ рдЕрдиреНрдп рд╢реЛрдзрдХрд░реНрддрд╛рдУрдВ рдиреЗ рдЧреЛрд▓рдВрдЧ http рд╕рд░реНрд╡рд░ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдПрдХ рднреЗрджреНрдпрддрд╛ (рд╕реАрд╡реАрдИ-2019-16276 рдХреЛ рд╕реМрдВрдкрд╛) рдХреА рдЦреЛрдЬ рдХреА - рд╕рд░реНрд╡рд░ рдиреЗ рд╣реЗрдбрд░ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд┐рдпрд╛ рдпрджрд┐ рдкреНрд░реАрд▓реЗрдЯ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдЬрдЧрд╣ рдереАред
рдкреНрд░рд╢реНрди:

рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рдмрд╛рдж:

рдЬреЛрдЦрд┐рдо рдХрд╛ рдлрд╛рдпрджрд╛ рдЙрдард╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рдлреНрд░рдВрдЯрдПрдВрдб рд╕рд░реНрд╡рд░ рдиреЗ рд╣реЗрдбрд░ рдХреЛ рдПрдХ рд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рдЕрдирджреЗрдЦрд╛ рдХрд┐рдпрд╛, рдФрд░ рдЕрдиреБрд░реЛрдз рдХреЗ рдЖрдХрд╛рд░ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА-рд▓рдВрдмрд╛рдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред
рдЧреЛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдХреИрдбреА рд╡реЗрдм рд╕рд░реНрд╡рд░ рднреА рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдерд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ рдЙрд╕реА рдиреЗрдЯ / http рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдкреБрд╖реНрдЯрд┐ рдХреА рдХрд┐ GO рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдФрд░ рдкреИрдХреЗрдЬ рдХреЗ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЗ рдмрд╛рдж, рд╕рдорд╕реНрдпрд╛ рдЧрд╛рдпрдм рд╣реЛ рдЬрд╛рддреА рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ рдХреЛ lighthttpd рд╕рд░реНрд╡рд░ рдореЗрдВ рдПрдХ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛ рдорд┐рд▓реА (рдХреЛрдИ CVE рдЕрд╕рд╛рдЗрди рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╕рд░реНрд╡рд░ рдЕрдВрддрд░рд┐рдХреНрд╖ рд╡рд╛рд▓реЗ рд╣реЗрдбрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддрд╛ рд╣реИ:

рдбреЗрд╡рд▓рдкрд░реНрд╕ RFC 7230 (рдФрд░ рд▓реЗрдЦрдХ, рднреА) рдХреЗ рд╕рд╛рде рдХрд╛рдлреА рд╕рд╣рдордд рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдорд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╣реЗрдбрд░ рдХреЗ рдЧрд▓рдд рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░реА рдкреНрд░реЙрдХреНрд╕реА рдХреЗ рд╕рд╛рде рдирд┐рд╣рд┐рдд рд╣реИ рдЬреЛ рд╕рд╛рдорд╛рдиреНрдп рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рдиреЗ рдФрд░ рдЙрдирдХреА рдЬрд╛рдВрдЪ рдХрд┐рдП рдмрд┐рдирд╛ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдмрдЧ рдХреЛ рдирдИ рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдареАрдХ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, lighttpd рдкрд╛рд░реНрд╕ (рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИ) рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд░рд┐рд╡рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдиреНрд╣реЗрдВ рд░рд┐рд╡рд░реНрд╕ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗред рдРрд╕рд╛ рдХрд░рдиреЗ рд╕реЗ https://portswigger.net/research/http-desync-attacks-request-smuggling-reborn рдореЗрдВ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рд╣рдорд▓реЛрдВ рдХреЛ рд▓рд╛рдЗрдЯрдЯреАрдбреА рд╕реЗ рдКрдкрд░ рдХреА рдУрд░ рд╕рд░реНрд╡рд░ рддрдХ рдкрд╣реБрдВрдЪрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЬреИрд╕рд╛ рдХрд┐ рдКрдкрд░ рд╕реНрдЯрдмреНрдпреВрд╣рд▓рд░ рджреНрд╡рд╛рд░рд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓рд╛рдЗрдЯрд╕реНрдЯреИрдк рд╕реЗ рдиреАрдЪреЗ рдХреА рдУрд░ рдкреНрд░реЙрдХреНрд╕рд┐рд╕, рд▓рд╛рдЗрдЯрдЯреИрдк рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдкрд╛рд╕ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рд▓рд╛рдЗрдЯрдЯреИрдк рдХреА рдЕрдЧрд▓реА рд░рд┐рд▓реАрдЬрд╝ рдореЗрдВ рдЬреЛ рдмрджрд▓рд╛рд╡ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд╡рд╣ рдлрд╝реАрд▓реНрдб-рдиреЗрдо рдФрд░ рдХреЙрд▓рди рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдкреЗрд╕ рдпрд╛ рдЯреИрдм рдХреЗ рд╕рд╛рде рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рдХреЛ рд░рд┐рдЬреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рддрднреА рдЬрдм рд▓рд╛рдЗрдЯрдЯреИрдк рдХреЛ рд╕рдЦреНрдд http рд╣реИрдбрд░ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреЗ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ) рдореЛрдб рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реЛред
рдЪреЗрд░реА рдмрдЧ рдврд╛рдВрдЪреЗ рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдЪреЗрд░реВрдЯ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдореЗрдВ рднреА рдпрд╣реА рдмрдЧ рдкрд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдпрд╣ рдорд┐рдиреА-рдлреНрд░реЗрдорд╡рд░реНрдХ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдкреНрд╕ рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдПрдкреАрдЖрдИ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдмрдЧ рд░рд┐рдкреЛрд░реНрдЯ рдЦреЛрд▓реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИрдВрдЧ рд╣реЛ рдЬрд╛рддреА рд╣реИред
рднреЗрджреНрдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рдФрд░ рдкрд░реНрдпрд╛рдкреНрдд рд╕реНрдерд┐рддрд┐
рдЗрд╕рд▓рд┐рдП, рднреЗрджреНрдпрддрд╛ рдХреА рдЬрд╛рдБрдЪ рдФрд░ рджреЛрд╣рди рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╢рд░реНрддреЗрдВ рдХреНрдпрд╛ рд╣реИрдВ:
- рдкреЛрд╕реНрдЯ рдЕрдиреБрд░реЛрдзред рд╣рд╛рд▓рд╛рдВрдХрд┐ RFC GET рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рд╛рдордЧреНрд░реА-рд▓рдВрдмрд╛рдИ рдФрд░ рд╕реНрдерд╛рдирд╛рдВрддрд░рдг-рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╣реЗрдбрд░реЛрдВ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рддрд┐рдмрдВрдзрд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреЗрд╡рд▓ POST рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдлреНрд░рдВрдЯреЗрдВрдб рдФрд░ рдмреИрдХреЗрдВрдб рд╕рд░реНрд╡рд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ - рдпрджрд┐ рдХреЛрдИ рдирд╣реАрдВ рд╣реИ, рддреЛ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реЛрдЧрд╛ред
- рд╡реЗрдм рд╕рд░реНрд╡рд░ рдХреЛ рдЯреНрд░рд╛рдВрд╕рдлрд░-рдПрдиреНрдХреЛрдбрд┐рдВрдЧ рд╣реЗрдбрд░ рдХреЛ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЕрд░реНрдерд╛рдд, рдЗрд╕реЗ "рдкрдврд╝рдирд╛" рдЪрд╛рд╣рд┐рдП, рдФрд░ рджреВрд╕рд░реЗ рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреНрд░рдпреЛрдЧрд╢рд╛рд▓рд╛ рдкрд░реАрдХреНрд╖рдг
рдореМрдЬреВрджрд╛ рд╡реЗрдм рд╕рд░реНрд╡рд░ рдФрд░ рдкреНрд░реЙрдХреНрд╕реА рдореЗрдВ рдмреЗрд╣рддрд░ рд╕рдордЭ рдФрд░ рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдХреЗ рд▓рд┐рдП, рдбреЙрдХрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдиреАрдп рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рд╡рд╛рддрд╛рд╡рд░рдг рдХреЛ рддреИрдирд╛рдд рдХрд░рдирд╛ рдмреБрджреНрдзрд┐рдорд╛рдиреА рд╣реИред
рдкрд░реАрдХреНрд╖рдг рдкрд░реНрдпрд╛рд╡рд░рдг рдЖрд░реЗрдЦ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг:

рдЖрд╡реЗрджрди рдХреЛрдб:
from flask import Flask, request, jsonify app = Flask(__name__) @app.route('/', methods=['GET', 'POST']) def main(): # the next line is required for Transfer-Encoding support in the request request.environ['wsgi.input_terminated'] = True headers = {} for header in request.headers: headers[header[0]] = header[1] print (request.data) print (headers) return jsonify(body=str(request.data), headers=headers)
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рджреГрд╢реНрдпрдкрдЯрд▓ рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рдлрд╛рдЗрд▓
localhost:80 log ../access.log proxy / host.docker.internal:8888
рдлрд┐рд░ рд╕рдм рдХреБрдЫ рд╕рд░рд▓ рд╣реИ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЪрд▓рд╛рдПрдБ:
gunicorn --keep-alive 10 -k gevent --bind 0.0.0.0:8888 -w 4 backend:app
рдФрд░ рдХрдВрдЯреЗрдирд░:
docker run -d -t --name caddy -p 80:80 -p 443:443 -v /Users/sun/work/caddyfile:/etc/Caddyfile abiosoft/caddy:latest
рдмрд░реНрдк рд╕реНрдЯреЛрд░ рд╕реЗ рд╣рдо рдбреАрдмрдЧрд┐рдВрдЧ рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП HTTP рд░рд┐рдХреНрд╡реЗрд╕реНрдЯ рд╕реНрдордЧрд▓рд░ рдФрд░ рд▓рдХрдбрд╝рд╣рд╛рд░рд╛ ++ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд░рд┐рдкреАрдЯрд░ рдореЗрдВ рдЕрдЧрд▓рд╛ рд╣рдо рдПрдХ рд╕рд░рд▓ рдЕрдиреБрд░реЛрдз рдмрдирд╛рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣:
POST / HTTP/1.1 Host: localhost Content-Length: 8 Connection: close body=123
рдФрд░ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рднреЗрдЬреЗрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:
HTTP/1.1 200 OK Content-Length: 202 Content-Type: application/json Date: Mon, 07 Oct 2019 13:17:18 GMT Server: Caddy Server: gunicorn/19.9.0 Connection: close {"body":"b'body=123'","headers":{"Accept-Encoding":"gzip","Connection":"close","Content-Length":"8","Host":"host.docker.internal:8888","User-Agent":"Go-http-client/1.1","X-Forwarded-For":"172.17.0.1"}}
рдЕрдм рд▓реЙрдиреНрдЪ рд╕реНрдореЙрдЧрд▓ рдкреНрд░реЛрдм рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ рдЬрд╡рд╛рдм рджреЗрдЦреЗрдВред

рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдЗрд╕ рдкрд▓ рдореЗрдВ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдзреЛрдВ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕реЗрд╡рд╛рдПрдВ рдХрдордЬреЛрд░ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВред рдЬрд┐рдЬреНрдЮрд╛рд╕реБ рдкрд╛рдардХ рдХреЗ рд▓рд┐рдП рдпрд╣ рд╣рд┐рд╕реНрд╕рд╛ рдмрдЪрд╛ рд╣реБрдЖ рд╣реИред