Ten artykuł jest lustrzanym artykułem tłumaczenia maszynowego, kliknij tutaj, aby przejść do oryginalnego artykułu.

Widok: 40852|Odpowiedź: 0

[ASP.NET] Nagłówki żądań Ocelot muszą zawierać wyłącznie znaki ASCII

[Skopiuj link]
Opublikowano 10.05.2021 15:24:29 | | | |
Recenzja:

Seria Ocelot (1) ASP.NET Core Gateway w praktyce
https://www.itsvse.com/thread-9284-1-1.html


Po uruchomieniu bramy ocelot zgłaszany jest następujący błąd dla interfejsu dostępowego:
Kod statusu: 502; Zła brama                                                                                                                                                                                                                                                                                                                                                                                                                      
Projekt jest ASP.NET Core 3.1,Wersja używana przez Ocelota to 16.0.1



info: Ocelot.RateLimit.Middleware.ClientRateLimitMiddleware[0]
      requestId: 0HM8JAOKL2C09:00000006, previousRequestId: brak poprzedniego identyfikatora żądania, wiadomość: EndpointRateLimiting nie jest włączony dla /{url}
warn: Ocelot.Responder.Middleware.ResponderMiddleware[0]
      requestId: 0HM8JAOKL2C09:00000006, previousRequestId: brak poprzedniego identyfikatora żądania, wiadomość: Kod błędu: ConnectionToDownstreamServiceError Message: Błąd połączenia z usługą downstream, wyjątek: System.Net.Http.HttpRequestException: Nagłówki żądań muszą zawierać wyłącznie znaki ASCII.
         at System.Net.Http.HttpConnection.WriteStringAsync(String s)
         at System.Net.Http.HttpConnection.WriteHeadersAsync(nagłówki HttpHeaders, String cookiesFromContainer)
         at 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)
         at System.Net.Http.DiagnosticsHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
         at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Task'1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
         w Ocelot.Requester.HttpClientHttpRequester.GetResponse(HttpContext httpContext) błędy znalezione w ResponderMiddleware. Ustawianie odpowiedzi błędnej dla ścieżki żądania:/test1/home/index, metoda żądania: GET
Używając Fiddlera do łapania pakietów w następujący sposób, odkryłem, że ciasteczko ma chiński ciąg znaków, czyli następująco:




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=测试


Przeglądarka zapisuje kod cookie (Następująca wartość kodowa nie jest ucieczką) może odtworzyć problem:

Konsola przeglądarki zapisuje pliki cookie
https://www.itsvse.com/thread-4682-1-1.html
Spróbuj opróżnić pamięć podręczną ciasteczek, a brama wraca do normy, jak pokazano na poniższym obrazku:



Kolejność wykonania middleware z Ocelotem jest następująca:

PreErrorResponderMiddleware
PreAuthenticationMiddleware
Oprogramowanie middleware uwierzytelniania
PreAuthorizacjaMiddleware
AuthorMiddleware       
PreQueryStringBuilderMiddleware


(Koniec)




Poprzedni:ASP.NET Core otrzymuje pełny link URL z żądaniem
Następny:Test wydajności Redis Benchmark
Zrzeczenie się:
Całe oprogramowanie, materiały programistyczne lub artykuły publikowane przez Code Farmer Network służą wyłącznie celom edukacyjnym i badawczym; Powyższe treści nie mogą być wykorzystywane do celów komercyjnych ani nielegalnych, w przeciwnym razie użytkownicy ponoszą wszelkie konsekwencje. Informacje na tej stronie pochodzą z Internetu, a spory dotyczące praw autorskich nie mają z nią nic wspólnego. Musisz całkowicie usunąć powyższą zawartość z komputera w ciągu 24 godzin od pobrania. Jeśli spodoba Ci się program, wspieraj oryginalne oprogramowanie, kup rejestrację i korzystaj z lepszych, autentycznych usług. W przypadku naruszenia praw prosimy o kontakt mailowy.

Mail To:help@itsvse.com