рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдХреЗ рд╕рд╛рде рдЬреАрд╡рди рд╕реЗ: Spaniards HTTP рд╕рд░реНрд╡рд░ рдиреЗ рдХреИрд╕реЗ рд╢рд┐рдХрд╛рдпрдд рдирд╣реАрдВ рдХреА



рд╣рдорд╛рд░реЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐, рдЬрд┐рд╕рдХрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯреИрдХ Microsoft (Azure) рд╕реЗ рдХреНрд▓рд╛рдЙрдб рдореЗрдВ рд░рд╣рддрд╛ рд╣реИ, рдХреЛ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛: рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рдпреВрд░реЛрдк рдХреЗ рдХреБрдЫ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЗ рдЕрдиреБрд░реЛрдзреЛрдВ рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рддреНрд░реБрдЯрд┐ 400 ( рдЦрд░рд╛рдм рдЕрдиреБрд░реЛрдз ) рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рд▓рдЧрд╛ред рд╕рднреА рдЕрдиреБрдкреНрд░рдпреЛрдЧ .NET рдореЗрдВ рд▓рд┐рдЦреЗ рдЧрдП рд╣реИрдВ, рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдореЗрдВ рддреИрдирд╛рдд рд╣реИрдВ ...

рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдПрдкреАрдЖрдИ рд╣реИ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЕрдВрддрддрдГ рд╕рднреА рдЯреНрд░реИрдлрд╝рд┐рдХ рдЖрддреЗ рд╣реИрдВред рдЗрд╕ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ .NET рдХреНрд▓рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд┐рдП рдЧрдП Kestrel HTTP рд╕рд░реНрд╡рд░ рджреНрд╡рд╛рд░рд╛ рдФрд░ рдкреЙрдб рдореЗрдВ рд╣реЛрд╕реНрдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рдкрд░ рд╕реБрдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдбрд┐рдмрдЧрд┐рдВрдЧ рдХреЗ рд╕рд╛рде, рд╣рдо рдЗрд╕ рдЕрд░реНрде рдореЗрдВ рднрд╛рдЧреНрдпрд╢рд╛рд▓реА рдереЗ рдХрд┐ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдерд╛, рдЬрд┐рд╕реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░рдиреЗ рдореЗрдВ рд╕рдорд╕реНрдпрд╛ рдереАред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╛рддрд╛рдпрд╛рдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рджреНрд╡рд╛рд░рд╛ рд╕рдм рдХреБрдЫ рдЬрдЯрд┐рд▓ рдерд╛:



рдЗрдирдЧреНрд░реЗрдб рдореЗрдВ рддреНрд░реБрдЯрд┐ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:

{ "number_fields":{ "status":400, "request_time":0.001, "bytes_sent":465, "upstream_response_time":0, "upstream_retries":0, "bytes_received":2328 }, "stream":"stdout", "string_fields":{ "ingress":"app", "protocol":"HTTP/1.1", "request_id":"f9ab8540407208a119463975afda90bc", "path":"/api/sign-in", "nginx_upstream_status":"400", "service":"app", "namespace":"production", "location":"/front", "scheme":"https", "method":"POST", "nginx_upstream_response_time":"0.000", "nginx_upstream_bytes_received":"120", "vhost":"api.app.example.com", "host":"api.app.example.com", "user":"", "address":"83.41.81.250", "nginx_upstream_addr":"10.240.0.110:80", "referrer":"https://api.app.example.com/auth/login?long_encrypted_header", "service_port":"http", "user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36", "time":"2019-03-06T18:29:16+00:00", "content_kind":"cache-headers-not-present", "request_query":"" }, "timestamp":"2019-03-06 18:29:16", "labels":{ "app":"nginx", "pod-template-generation":"6", "controller-revision-hash":"1682636041" }, "namespace":"kube-nginx-ingress", "nsec":6726612, "source":"kubernetes", "host":"k8s-node-55555-0", "pod_name":"nginx-v2hcb", "container_name":"nginx", "boolean_fields":{} } 

рдЙрд╕реА рд╕рдордп, Kestrel рдиреЗ рджрд┐рдпрд╛:

 HTTP/1.1 400 Bad Request Connection: close Date: Wed, 06 Mar 2019 12:34:20 GMT Server: Kestrel Content-Length: 0 

рдЕрдзрд┐рдХрддрдо рд╡рд╛рдЪрд╛рд▓рддрд╛ рдХреЗ рд╕рд╛рде рднреА, рдХреЗрд╕реНрдЯреЗрд▓ рддреНрд░реБрдЯрд┐ рдореЗрдВ рдмрд╣реБрдд рдХрдо рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдереА :

 { "number_fields":{"ThreadId":76}, "stream":"stdout", "string_fields":{ "EventId":"{\"Id\"=>17, \"Name\"=>\"ConnectionBadRequest\"}", "SourceContext":"Microsoft.AspNetCore.Server.Kestrel", "ConnectionId":"0HLL2VJSST5KV", "@mt":"Connection id \"{ConnectionId}\" bad request data: \"{message}\"", "@t":"2019-03-07T13:06:48.1449083Z", "@x":"Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException: Malformed request: invalid headers.\n at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Http1Connection.TryParseRequest(ReadResult result, Boolean& endConnection)\n at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.<ProcessRequestsAsync>d__185`1.MoveNext()", "message":"Malformed request: invalid headers." }, "timestamp":"2019-03-07 13:06:48", "labels":{ "pod-template-hash":"2368795483", "service":"app" }, "namespace":"production", "nsec":145341848, "source":"kubernetes", "host":"k8s-node-55555-1", "pod_name":"app-67bdcf98d7-mhktx", "container_name":"app", "boolean_fields":{} } 

рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреЗрд╡рд▓ tcpdump рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░реЗрдЧрд╛ ... рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╛рддрд╛рдпрд╛рдд рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рджреЛрд╣рд░рд╛рдКрдВрдЧрд╛:



рдЬрд╛рдВрдЪ


рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдЙрд╕ рд╡рд┐рд╢реЗрд╖ рдиреЛрдб рдкрд░ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рд╕реБрдирдирд╛ рдмреЗрд╣рддрд░ рд╣реИ рдЬрд╣рд╛рдВ рдХреБрдмреЗрд░рдиреЗрдЯреНрд╕ рдиреЗ рдлрд▓реА рдХреЛ рддреИрдирд╛рдд рдХрд┐рдпрд╛: рдбрдВрдк рдорд╛рддреНрд░рд╛ рдРрд╕реА рд╣реЛрдЧреА рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рдвреВрдВрдврдирд╛ рд╕рдВрднрд╡ рд╣реЛрдЧрд╛ред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЗрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рддреЗ рд╕рдордп, рдРрд╕рд╛ рдлреНрд░реЗрдо рджреЗрдЦрд╛ рдЧрдпрд╛ рдерд╛:

 GET /back/user HTTP/1.1 Host: api.app.example.com X-Request-ID: 27ceb14972da8c21a8f92904b3eff1e5 X-Real-IP: 83.41.81.250 X-Forwarded-For: 83.41.81.250 X-Forwarded-Host: api.app.example.com X-Forwarded-Port: 443 X-Forwarded-Proto: https X-Original-URI: /front/back/user X-Scheme: https X-Original-Forwarded-For: 83.41.81.250 X-Nginx-Geo-Client-Country: Spain X-Nginx-Geo-Client-City: M.laga Accept-Encoding: gzip CF-IPCountry: ES CF-RAY: 4b345cfd1c4ac691-MAD CF-Visitor: {"scheme":"https"} pragma: no-cache cache-control: no-cache accept: application/json, text/plain, */* origin: https://app.example.com user-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Safari/537.36 referer: https://app.example.com/auth/login accept-language: en-US,en;q=0.9,en-GB;q=0.8,pl;q=0.7 cookie: many_encrypted_cookies; .AspNetCore.Identity.Application=something_encrypted; CF-Connecting-IP: 83.41.81.250 True-Client-IP: 83.41.81.250 CDN-Loop: cloudflare HTTP/1.1 400 Bad Request Connection: close Date: Wed, 06 Mar 2019 12:34:20 GMT Server: Kestrel Content-Length: 0 

рдбрдВрдк рдХреА рд╕рд╛рд╡рдзрд╛рдиреАрдкреВрд░реНрд╡рдХ рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдкрд░, M.laga ред M.laga рд╢рдмреНрдж рджреЗрдЦрд╛ рдЧрдпрд╛ред рдпрд╣ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рд╕реНрдкреЗрди рдореЗрдВ рдХреЛрдИ рд╢рд╣рд░ M.laga рдирд╣реАрдВ рд╣реИ (рд▓реЗрдХрд┐рди рдорд▓рд╛рдЧрд╛ рд╣реИ )ред рдЗрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ рдЗрдирдЧреНрд░реЗрдб рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЛ рджреЗрдЦрд╛, рдЬрд╣рд╛рдВ рд╣рдордиреЗ рдПрдХ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ (рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдЕрдиреБрд░реЛрдз рдкрд░) "рд╣рд╛рдирд┐рд░рд╣рд┐рдд" рд╕реНрдирд┐рдкреЗрдЯ рдбрд╛рд▓рд╛ рдерд╛:

  ingress.kubernetes.io/configuration-snippet: | proxy_set_header X-Nginx-Geo-Client-Country $geoip_country_name; proxy_set_header X-Nginx-Geo-Client-City $geoip_city; 

рдЬрдм рдЖрдк рдЗрди рд╣реЗрдбрд░ рдХреЛ рдЕрдЧреНрд░реЗрд╖рд┐рдд рдХрд░рдирд╛ рдЕрдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕рдм рдХреБрдЫ рдЕрдЪреНрдЫрд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ! (рдпрд╣ рдЬрд▓реНрдж рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЧрдпрд╛ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЕрдм рдЗрди рд╣реЗрдбрд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред)

рдЕрдм рд╕рдорд╕реНрдпрд╛ рдХреЛ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рддрд░реАрдХреЗ рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ ред рдпрджрд┐ рдЖрдк localhost:80 рд▓рд┐рдП рдЯреЗрд▓рдиреЗрдЯ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЖрд╡реЗрджрди рдХреЗ рдЕрдВрджрд░ рдЗрд╕реЗ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреБрди: рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ localhost:80 :

 GET /back/user HTTP/1.1 Host: api.app.example.com cache-control: no-cache accept: application/json, text/plain, */* origin: https://app.example.com Cookie: test=Desiree 

... 401 Unauthorized рд░рд┐рдЯрд░реНрди, рдЙрдореНрдореАрдж рдХреЗ 401 Unauthorized ред рдФрд░ рдЕрдЧрд░ рд╣рдо рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:

 GET /back/user HTTP/1.1 Host: api.app.example.com cache-control: no-cache accept: application/json, text/plain, */* origin: https://app.example.com Cookie: test=D├йsir├йe 

?

400 Bad request рд╡рд╛рдкрд╕ рдЖрдПрдЧрд╛ - рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЧ рдореЗрдВ рд╣рдореЗрдВ рд╡рд╣ рддреНрд░реБрдЯрд┐ рдорд┐рд▓реЗрдЧреА рдЬреЛ рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ:

 { "@t":"2019-03-31T12:59:54.3746446Z", "@mt":"Connection id \"{ConnectionId}\" bad request data: \"{message}\"", "@x":"Microsoft.AspNetCore.Server.Kestrel.Core.BadHttpRequestException: Malformed request: invalid headers.\n at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.Http1Connection.TryParseRequest(ReadResult result, Boolean& endConnection)\n at Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpProtocol.<ProcessRequestsAsync>d__185`1.MoveNext()", "ConnectionId":"0HLLLR1J974L9", "message":"Malformed request: invalid headers.", "EventId":{ "Id":17, "Name":"ConnectionBadRequest" }, "SourceContext":"Microsoft.AspNetCore.Server.Kestrel", "ThreadId":71 } 

рдкрд░рд┐рдгрд╛рдо


рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, Kestrel рд╕рд╣реА рдврдВрдЧ рд╕реЗ HTTP рд╣реЗрдбрд░ рдХреЛ UTF-8 рдореЗрдВ рд╕рд╣реА рд╡рд░реНрдгреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдХрд╛рдлреА рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╢рд╣рд░реЛрдВ рдХреЗ рдирд╛рдореЛрдВ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВред

рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдХрд╛рд░рдХ рдпрд╣ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рд╣рдХ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЖрд╡реЗрджрди рдореЗрдВ рдХреЗрд╕реНрдЯреЗрд▓ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдирд╣реАрдВ рдмрдирд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдВрдХрд┐, AspNetCore рдореЗрдВ рд╣реА ( рдирдВрдмрд░ 4318 , рдирдВрдмрд░ 7707 ) рдХреЗ рдореБрджреНрджреЛрдВ рдХрд╛ рдХрд╣рдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдорджрдж рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ ...

рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрддрд╛рдПрдВ: рдиреЛрдЯ рдЕрдм Kestrel рдпрд╛ UTF-8 (2019, рд╡рд░реНрд╖ рдореЗрдВ?) рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣реИ рдХрд┐ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреА рдЦреЛрдЬ рдХреЗ рджреМрд░рд╛рди рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдХрд╛ рдзреНрдпрд╛рди рдФрд░ рд▓рдЧрд╛рддрд╛рд░ рдЕрдзреНрдпрдпрди рдЬрд▓реНрдж рдпрд╛ рдмрд╛рдж рдореЗрдВ рдлрд▓ рд╣реЛрдЧрд╛ред рдЕ рдЫрд╛!

рдкреБрдирд╢реНрдЪ


рд╣рдорд╛рд░реЗ рдмреНрд▓реЙрдЧ рдореЗрдВ рднреА рдкрдврд╝реЗрдВ:

Source: https://habr.com/ru/post/hi448420/


All Articles