Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 40852|Risposta: 0

[ASP.NET] Le intestazioni Ocelot Request devono contenere solo caratteri ASCII

[Copiato link]
Pubblicato su 10/05/2021 15:24:29 | | | |
Recensione:

Serie Ocelot (1) ASP.NET Gateway Core nella pratica
https://www.itsvse.com/thread-9284-1-1.html


Quando avvii il gateway oceloti, viene segnalato il seguente errore per l'interfaccia di accesso:
Codice di stato: 502; Gateway Difettoso                                                                                                                                                                                                                                                                                                                                                                                                                      
Il progetto è ASP.NET Core 3.1,La versione utilizzata da Ocelot è la 16.0.1



info: Ocelot.RateLimit.Middleware.ClientRateLimitMiddleware[0]
      requestId: 0HM8JAOKL2C09:00000006, previousRequestId: nessun id richiesta precedente, messaggio: EndpointRateLimiting non è abilitato per /{url}
warn: Ocelot.Responder.Middleware.ResponderMiddleware[0]
      requestId: 0HM8JAOKL2C09:00000006, previousRequestId: nessun id richiesta precedente, messaggio: Codice di errore: ConnectionToDownstreamServiceMessaggio di errore: Errore che si collega al servizio downstream, eccezione: System.Net.Http.HttpHttpRequestException: Le intestazioni delle richieste devono contenere solo caratteri ASCII.
         at System.Net.Http.HttpHttpConnection.WriteStringAsync(Stringa s)
         at System.Net.Http.HttpHttpConnection.WriteHeadersAsync(HttpHeaders headers, String cookiesFromContainer)
         at System.Net.Http.HttpHttpConnection.SendAsyncCore(richiesta HttpRequestMessage, cancellationToken cancellationToken)
         at System.Net.Http.HttpHttpConnectPool.SendWithNtConnectionAuthAsync(HttpConnection connection, HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
         at System.Net.Http.HttpHttpConnectPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
         at System.Net.Http.DiagnosticsHandler.SendAsync(HttpRequestMessage request, cancellationTokenCancellationToken)
         at System.Net.Http.HttpHttpClient.FinishSendAsyncBuffered(Task'1 sendTask, richiesta HttpRequestMessage, CancellationTokenSource cts, Boolean disposeCts)
         su Ocelot.Requester.HttpClientHttpRequester.GetResponse(HttpContext httpContext) errori riscontrati in ResponderMiddleware. Impostazione della risposta all'errore per il percorso di richiesta:/test1/home/index, metodo di richiesta: GET
Usando Fiddler per catturare i pacchetti come segue, ho scoperto che il cookie ha una stringa cinese, come segue:




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


Il browser scrive un codice cookie (Il seguente valore di codice non viene scappato) può riprodurre il problema:

La console del browser scrive i cookie
https://www.itsvse.com/thread-4682-1-1.html
Prova a svuotare la cache dei cookie e il gateway torna alla normalità come mostrato nell'immagine qui sotto:



L'ordine di esecuzione del middleware con Ocelot è il seguente:

PreErrorResponderMiddleware
PreAutenticationMiddleware
Middleware di autenticazione
PreAuthorisationMiddleware
Middleware di autorizzazione       
PreQueryStringBuilderMiddleware


(Fine)




Precedente:ASP.NET Core riceve il link completo dell'URL richiesta
Prossimo:Test di prestazioni Redis Benchmark
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com