Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 40852|Répondre: 0

[ASP.NET] Les en-têtes de requête Ocelot doivent contenir uniquement des caractères ASCII

[Copié le lien]
Publié sur 10/05/2021 15:24:29 | | | |
Révision:

Série Ocelot (1) ASP.NET Gateway de base en pratique
https://www.itsvse.com/thread-9284-1-1.html


Lorsque vous lancez la passerelle ocelots, l’erreur suivante est signalée pour l’interface d’accès :
Code de statut : 502 ; Mauvaise Porte d’entrée                                                                                                                                                                                                                                                                                                                                                                                                                      
Le projet est ASP.NET Core 3.1,La version utilisée par Ocelot est la 16.0.1



info: Ocelot.RateLimit.Middleware.ClientRateLimitMiddleware[0]
      requestId : 0HM8JAOKL2C09:00000006, previousRequestId : no previous request id, message : EndpointRateLimiting n’est pas activé pour /{url}
warn: Ocelot.Responder.Middleware.ResponderMiddleware[0]
      requestId : 0HM8JAOKL2C09:00000006, previousRequestId : pas d’identifiant de requête précédent, message : Code d’erreur : ConnectionToDownstreamServiceMessage d’erreur : Erreur de connexion au service en aval, exception : System.Net.Http.HttpRequestException : Les en-têtes de requête doivent contenir uniquement des caractères ASCII.
         at System.Net.Http.HttpHttpConnection.WriteStringAsync(String s)
         at System.Net.Http.HttpHttpConnection.WriteHeadersAsync(HttpHeaders headers, String cookiesFromContainer)
         at System.Net.Http.HttpHttpConnection.SendAsyncCore(requêteHttpRequestMessage, CancellationToken cancellationToken)
         at System.Net.Http.HttpHttpConnectionPool.SendWithNtConnectionAuthAsync(HttpConnection connection, requêteHttpRequestMessage, Boolean doRequestAuth, CancellationToken cancellationToken)
         at System.Net.Http.HttpHttpConnectPool.SendWithRetryAsync(HttpRequestMessage request, boolean doRequestAuth, CancellationToken cancellationToken)
         at System.Net.Http.DiagnosticsHandler.SendAsync(requêteHttpRequestMessage, CancellationToken cancellationToken)
         at System.Net.Http.HttpHttpClient.FinishSendAsyncBuffered(Task'1 sendTask, requêteHttpRequestMessage, CancellationTokenSource cts, Boolean disposeCts)
         sur Ocelot.Requester.HttpClientHttpRequester.GetResponse(HttpContext httpContext) des erreurs trouvées dans ResponderMiddleware. Définition de la réponse d’erreur pour le chemin de requête :/test1/home/index, méthode de requête : GET
En utilisant Fiddler pour attraper les paquets comme suit, j’ai découvert que le cookie a une chaîne chinoise, comme suit :




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


Le navigateur écrit un code cookie (La valeur de code suivante n’est pas échappée) peut reproduire le problème :

La console du navigateur écrit des cookies
https://www.itsvse.com/thread-4682-1-1.html
Essayez de vider le cache de cookies et la passerelle revient à la normale comme montré sur l’image ci-dessous :



L’ordre d’exécution du middleware avec Ocelot est le suivant :

PreErrorResponderMiddleware
PréMiddleware PréAuthentication
Middleware d’authentification
Middleware de préautorisation
Middleware d’autorisation       
PreQueryStringBuilderMiddleware


(Fin)




Précédent:ASP.NET Core reçoit le lien de demande complète de l’URL
Prochain:Test de performance Redis Benchmark
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com