Recenzie:
Când pornești gateway-ul oceloti, este raportată următoarea eroare pentru interfața de acces:
Cod de status: 502; Bad Gateway Proiectul este ASP.NET Core 3.1,Versiunea folosită de Ocelot este 16.0.1
info: Ocelot.RateLimit.Middleware.ClientRateLimitMiddleware[0] requestId: 0HM8JAOKL2C09:00000006, previousRequestId: fără ID de cerere anterioară, mesaj: EndpointRateLimiting nu este activat pentru /{url}
warn: Ocelot.Responder.Middleware.ResponderMiddleware[0] requestId: 0HM8JAOKL2C09:00000006, previousRequestId: fără id de cerere anterioară, mesaj: Cod de eroare: ConnectionToDownstreamServiceMesaj de eroare: Eroare conectându-se la serviciul downstream, excepție: System.Net.Http.HttpRequestException: Anteturile de cerere trebuie să conțină doar caractere ASCII. la System.Net.Http.HttpHttpConnection.WriteStringAsync(String s) la System.Net.Http.HttpHttpConnection.WriteHeadersAsync(HttpHeaders headers, String cookiesFromContainer) la System.Net.Http.HttpHttpConnection.SendAsyncCore(cerere HttpRequestMessage, CancellationToken cancellationToken) at System.Net.Http.HttpHttpConnectionPool.SendWithNtConnectionAuthAsync(HttpConnection connection, HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken) at System.Net.Http.HttpHttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, boolean doRequestAuth, CancellationToken cancellationToken) la System.Net.Http.DiagnosticsHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) la System.Net.Http.HttpHttpClient.FinishSendAsyncBuffered(Task'1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts) la Ocelot.Requester.HttpClientHttpRequester.GetResponse(HttpContext httpContext) erori găsite în ResponderMiddleware. Setarea răspunsului la eroare pentru calea cererii:/test1/home/index, metoda de cerere: GET Folosind Fiddler pentru a prinde pachetele astfel, am descoperit că cookie-ul are un șir chinezesc, după cum urmează:
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=测试
Browserul scrie un cod pentru cookie-uri (Următoarea valoare a codului nu este scăpată) poate reproduce problema:
Încearcă să golești cache-ul de cookie-uri și gateway-ul revine la normal, așa cum se vede în imaginea de mai jos:
Ordinea de execuție a middleware-ului cu Ocelot este următoarea:
PreErrorResponderMiddleware PreAuthenticationMiddleware Middleware de autentificare PreAuthorisationMiddleware Middleware de autorizare PreQueryStringBuilderMiddleware
(Sfârșit)
|