
āĻāĻŽāĻžāĻĻā§āϰ āĻā§āϞāĻžāϝāĻŧā§āύā§āĻā§āϰ āĻāĻāĻāύ āĻĒā§āϰāϤāĻŋāύāĻŋāϧāĻŋ, āϝāĻžāϰ āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ āϏā§āĻā§āϝāĻžāĻ āĻŽāĻžāĻāĻā§āϰā§āϏāĻĢā§āĻ āĻā§āϞāĻžāĻāĻĄ (āĻāĻāĻŋāĻāϰ) āĻ āĻĨāĻžāĻā§, āĻāĻāĻāĻŋ āϏāĻŽāϏā§āϝāĻžāϰ āϏāĻŽāĻžāϧāĻžāύ āĻāϰā§āĻā§: āϏāĻŽā§āĻĒā§āϰāϤāĻŋ, āĻāĻāϰā§āĻĒ āĻĨā§āĻā§ āĻāĻŋāĻā§ āĻā§āϞāĻžāϝāĻŧā§āύā§āĻā§āϰ āĻāĻŋāĻā§ āĻ
āύā§āϰā§āϧ āϤā§āϰā§āĻāĻŋ 400 āĻĻāĻŋāϝāĻŧā§ āĻļā§āώ āĻšāϤ⧠āĻļā§āϰ⧠āĻāϰā§āĻā§ () āϏāĻŽāϏā§āϤ āĻ
ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύ .NET-āϤ⧠āϞā§āĻāĻž, āĻā§āĻŦāĻžāϰāύā§āĻā§ āϏā§āĻĨāĻžāĻĒāύ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§...
āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻā§āϞāĻŋāϰ āĻŽāϧā§āϝ⧠āĻāĻāĻāĻŋ āĻšāϞ API, āϝāĻžāϰ āĻŽāĻžāϧā§āϝāĻŽā§ āϏāĻŽāϏā§āϤ āĻā§āϰā§āϝāĻžāĻĢāĻŋāĻ āĻļā§āώ āĻĒāϰā§āϝāύā§āϤ āĻāϏā§āĨ¤ āĻāĻ āĻā§āϰāĻžāĻĢāĻŋāĻ HTTP āϏāĻžāϰā§āĻāĻžāϰ āĻĻā§āĻŦāĻžāϰāĻž āĻļā§āύāĻž āĻšāϝāĻŧ , .NET āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ āĻĻā§āĻŦāĻžāϰāĻž āĻāύāĻĢāĻŋāĻāĻžāϰ āĻāϰāĻž āĻāĻŦāĻ āĻāĻāĻāĻŋ āĻĒāĻĄā§ āĻšā§āϏā§āĻ āĻāϰāĻž āĻšāϝāĻŧā§āĻā§ā§ˇ āĻĄāĻŋāĻŦāĻžāĻāĻŋāĻāϝāĻŧā§āϰ āϏāĻžāĻĨā§, āĻāĻŽāϰāĻž āĻāĻ āĻ āϰā§āĻĨā§ āĻāĻžāĻā§āϝāĻŦāĻžāύ āϝ⧠āĻāĻāĻāύ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āĻŦā§āϝāĻŦāĻšāĻžāϰāĻāĻžāϰ⧠āĻāĻŋāϞā§āύ āϝāĻŋāύāĻŋ āϧāĻžāϰāĻžāĻŦāĻžāĻšāĻŋāĻāĻāĻžāĻŦā§ āϏāĻŽāϏā§āϝāĻžāĻāĻŋ āĻĒā§āύāϰā§āϤā§āĻĒāĻžāĻĻāύ āĻāϰā§āĻāĻŋāϞā§āύāĨ¤ āϝāĻžāĻāĻšā§āĻ, āĻā§āϰā§āϝāĻžāĻĢāĻŋāĻ āĻā§āĻāύ āĻĻā§āĻŦāĻžāϰāĻž āϏāĻŦāĻāĻŋāĻā§ āĻāĻāĻŋāϞ āĻāĻŋāϞ:

āĻāύāĻā§āϰā§āϏ⧠āϤā§āϰā§āĻāĻŋāĻāĻŋ āĻĻā§āĻāϤ⧠āĻāĻāϰāĻāĻŽ āĻāĻŋāϞ:
{
"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":{}
}āĻāĻāĻ āϏāĻŽāϝāĻŧā§, āĻā§āϏā§āĻā§āϰā§āϞ āĻĻāĻŋāϝāĻŧā§āĻā§āύ:
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 āĻļāĻšāϰ āύā§āĻ (āĻāĻŋāύā§āϤ⧠āĻāĻā§ ) āĻāĻ āϧāĻžāϰāĻŖāĻžāĻāĻŋ āϧāϰ⧠āϰā§āĻā§, āĻāĻŽāϰāĻž āĻāύāĻā§āϰā§āϏ āĻāύāĻĢāĻŋāĻāĻžāϰā§āĻļāύā§āϰ āĻĻāĻŋāĻā§ āϤāĻžāĻāĻžāϞāĻžāĻŽ, āϝā§āĻāĻžāύ⧠āĻāĻŽāϰāĻž āĻāĻ āĻŽāĻžāϏ āĻāĻā§ āĻĸā§āĻāĻžāύ⧠āĻĻā§āĻā§āĻāĻŋ (āĻā§āϞāĻžāϝāĻŧā§āύā§āĻā§āϰ āĻ
āύā§āϰā§āϧā§) "āύāĻŋāϰāĻžāĻĒāĻĻ" āϏā§āύāĻŋāĻĒā§āĻ:
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:
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, āĻĒā§āϰāϤā§āϝāĻžāĻļāĻŋāϤ. āĻāĻŽāϰāĻž āϝāĻĻāĻŋ āĻāϰāĻŋ āϤāĻžāĻšāϞ⧠āĻāĻŋ āĻšāĻŦā§:
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
}āĻĢāϞāĻžāĻĢāϞ
āĻŦāĻŋāĻļā§āώ āĻāϰ⧠āĻā§āϏā§āĻā§āϰā§āϞ UTF-8-āĻ āϏāĻ āĻŋāĻ āĻ āĻā§āώāϰ āϏāĻš HTTP āĻļāĻŋāϰā§āύāĻžāĻŽāĻā§āϞāĻŋ āϏāĻ āĻŋāĻāĻāĻžāĻŦā§ āĻĒā§āϰāϏā§āϏ āĻāϰā§āύ, āϝāĻž āĻŽā§āĻāĻžāĻŽā§āĻāĻŋ āĻŦāĻĄāĻŧ āϏāĻāĻā§āϝāĻ āĻļāĻšāϰā§āϰ āύāĻžāĻŽā§āϰ āĻŽāϧā§āϝ⧠āϰāϝāĻŧā§āĻā§āĨ¤
āĻāĻŽāĻžāĻĻā§āϰ āĻā§āώā§āϤā§āϰ⧠āĻāĻāĻāĻŋ āĻ āϤāĻŋāϰāĻŋāĻā§āϤ āĻāĻžāϰāĻŖ āĻšāϞ āϝ⧠āĻā§āϞāĻžāϝāĻŧā§āύā§āĻ āĻŦāϰā§āϤāĻŽāĻžāύ⧠āĻ ā§āϝāĻžāĻĒā§āϞāĻŋāĻā§āĻļāύāĻāĻŋāϤ⧠āĻā§āϏā§āĻā§āϰā§āϞā§āϰ āĻŦāĻžāϏā§āϤāĻŦāĻžāϝāĻŧāύ āĻĒāϰāĻŋāĻŦāϰā§āϤāύ āĻāϰāĻžāϰ āĻĒāϰāĻŋāĻāϞā§āĻĒāύāĻž āĻāϰ⧠āύāĻžāĨ¤ āϝāĻžāĻāĻšā§āĻ, AspNetCore āύāĻŋāĻā§āĻ āϏāĻŽāϏā§āϝāĻžāĻā§āϞāĻŋ (, ) āϤāĻžāϰāĻž āĻŦāϞ⧠āϝ⧠āĻāĻāĻŋ āϏāĻžāĻšāĻžāϝā§āϝ āĻāϰāĻŦā§ āύāĻž ...
āϏāĻāĻā§āώā§āĻĒā§ āĻŦāϞāĻž āϝāĻžāϝāĻŧ: āύā§āĻāĻāĻŋ āĻāϰ āĻā§āϏā§āĻā§āϰā§āϞ āĻŦāĻž UTF-8 (2019 āϏāĻžāϞā§?!) āĻāϰ āύāĻŋāϰā§āĻĻāĻŋāώā§āĻ āϏāĻŽāϏā§āϝāĻžāĻā§āϞāĻŋ āϏāĻŽā§āĻĒāϰā§āĻā§ āύāϝāĻŧ, āϤāĻŦā§ āĻāĻ āϏāϤā§āϝāĻāĻŋ āϏāĻŽā§āĻĒāϰā§āĻā§ āĻŽāύāύāĻļā§āϞāϤāĻž āĻāĻŦāĻ āϧāĻžāϰāĻžāĻŦāĻžāĻšāĻŋāĻ āĻ āϧā§āϝāϝāĻŧāύ āϏāĻŽāϏā§āϝāĻžāĻā§āϞāĻŋ āĻ āύā§āϏāύā§āϧāĻžāύ āĻāϰāĻžāϰ āϏāĻŽāϝāĻŧ āĻāĻĒāύāĻŋ āϝ⧠āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻĒāĻĻāĻā§āώā§āĻĒ āĻā§āϰāĻšāĻŖ āĻāϰā§āύ āϤāĻž āĻļā§āĻā§āϰāĻ āĻŦāĻž āĻĒāϰ⧠āĻĢāϞ āĻĻā§āĻŦā§āĨ¤ āĻļā§āĻāĻāĻžāĻŽāύāĻž!
āĻĻā§āϰāώā§āĻāĻŦā§āϝ
āĻāĻŽāĻžāĻĻā§āϰ āĻŦā§āϞāĻā§āĻ āĻĒāĻĄāĻŧā§āύ:
- ÂĢ";
- ÂĢ";
- ÂĢ";
- ÂĢ";
- ÂĢÂģ.
āĻāϤā§āϏ: www.habr.com
