Dit artikel is een spiegelartikel van machinevertaling, klik hier om naar het oorspronkelijke artikel te gaan.

Bekijken: 40852|Antwoord: 0

[ASP.NET] Ocelot Request-headers mogen alleen ASCII-karakters bevatten

[Link kopiëren]
Geplaatst op 10-05-2021 15:24:29 | | | |
Recensie:

Ocelot Series (1) ASP.NET Core Gateway in de praktijk
https://www.itsvse.com/thread-9284-1-1.html


Wanneer je de ocelot-gateway start, wordt de volgende foutmelding gerapporteerd voor de toegangsinterface:
Statuscode: 502; Slechte Gateway                                                                                                                                                                                                                                                                                                                                                                                                                      
Het project is ASP.NET Core 3.1,De versie die door Ocelot wordt gebruikt is 16.0.1



info: Ocelot.RateLimit.Middleware.ClientRateLimitMiddleware[0]
      requestId: 0HM8JAOKL2C09:00000006, previousRequestId: no previous request id, bericht: EndpointRateLimiting is niet ingeschakeld voor /{url}
warn: Ocelot.Responder.Middleware.ResponderMiddleware[0]
      requestId: 0HM8JAOKL2C09:00000006, previviousRequestId: geen eerdere request id, bericht: Foutcode: ConnectionToDownstreamServiceError Message: Error verbinding met downstream service, uitzondering: System.Net.Http.Http.HttpRequestException: Requestheaders mogen alleen ASCII-tekens bevatten.
         op System.Net.Http.HttpConnection.WriteStringAsync(String s)
         op System.Net.Http.HttpConnection.WriteHeadersAsync(HttpHeaders-headers, String cookiesFromContainer)
         bij System.Net.Http.HttpConnection.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
         at System.Net.Http.HttpConnectionPool.SendWithNtConnectionAuthAsync(HttpConnection connection, HttpRequestMessage request, Boolean doRequestAuth, CancellationToken. cancelToken)
         at System.Net.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
         op System.Net.Http.DiagnosticsHandler.SendAsync(HttpRequestMessage-verzoek, CancellationToken cancellationToken)
         op System.Net.Http.Http.HttpClient.FinishSendAsyncBuffered(Task'1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
         op Ocelot.Requester.HttpClientHttpRequester.GetResponse(HttpContext httpContext) fouten gevonden in ResponderMiddleware. Foutrespons instellen voor request path:/test1/home/index, request method: GET
Met Fiddler om pakketten als volgt te vangen, ontdekte ik dat het koekje een Chinese string heeft, als volgt:




Host: localhost:5002
Connection: keep-alive
Cache-Control: max-age=0
sec-ch-ua: "Google Chrome";v="89", "Chromium";v="89", ";Not A Brand";v="99"
sec-ch-ua-mobile: ?0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.114 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9
Cookie: aaa=测试


De browser schrijft een cookiecode (De volgende codewaarde wordt niet ontsnapt) kan het probleem reproduceren:

De browserconsole schrijft cookies
https://www.itsvse.com/thread-4682-1-1.html
Probeer de cookiecache te legen en de gateway keert terug naar normaal zoals te zien is op de onderstaande afbeelding:



De volgorde van uitvoering van de middleware met Ocelot is als volgt:

PreErrorResponderMiddleware
PreAuthenticationMiddleware
AuthenticationMiddleware
PreAuthorisationMiddleware
AuthorisationMiddleware       
PreQueryStringBuilderMiddleware


(Einde)




Vorig:ASP.NET Core krijgt de volledige URL van het verzoek
Volgend:Redis Benchmark prestatietest
Disclaimer:
Alle software, programmeermaterialen of artikelen die door Code Farmer Network worden gepubliceerd, zijn uitsluitend bedoeld voor leer- en onderzoeksdoeleinden; De bovenstaande inhoud mag niet worden gebruikt voor commerciële of illegale doeleinden, anders dragen gebruikers alle gevolgen. De informatie op deze site komt van het internet, en auteursrechtconflicten hebben niets met deze site te maken. Je moet bovenstaande inhoud volledig van je computer verwijderen binnen 24 uur na het downloaden. Als je het programma leuk vindt, steun dan de echte software, koop registratie en krijg betere echte diensten. Als er sprake is van een inbreuk, neem dan contact met ons op via e-mail.

Mail To:help@itsvse.com