Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 40852|Respuesta: 0

[ASP.NET] Los encabezados de Ocelot Request deben contener solo caracteres ASCII

[Copiar enlace]
Publicado en 10/5/2021 15:24:29 | | | |
Revisión:

Serie Ocelot (1) ASP.NET Puerta Principal en la práctica
https://www.itsvse.com/thread-9284-1-1.html


Cuando inicias la pasarela ocelote, se reporta el siguiente error para la interfaz de acceso:
Código de estado: 502; Puerta de entrada mala                                                                                                                                                                                                                                                                                                                                                                                                                      
El proyecto es ASP.NET Core 3.1,La versión utilizada por Ocelot es la 16.0.1



info: Ocelot.RateLimit.Middleware.ClientRateLimitMiddleware[0]
      requestId: 0HM8JAOKL2C09:00000006, previousRequestId: no prior request id, mensaje: EndpointRateLimiting no está habilitado para /{url}
warn: Ocelot.Responder.Middleware.ResponderMiddleware[0]
      requestId: 0HM8JAOKL2C09:00000006, previousRequestId: sin id de solicitud anterior, mensaje: Código de error: ConnectionToDownstreamServiceMensaje de error: Error conectándose al servicio downstream, excepción: System.Net.Http.HttpRequestException: Los encabezados de solicitud deben contener solo caracteres ASCII.
         en System.Net.Http.HttpHttpConnection.WriteStringAsync(String s)
         at System.Net.Http.HttpHttpConnection.WriteHeadersAsync (encabezados HttpHeaders, String cookiesFromContainer)
         at System.Net.Http.HttpConnection.SendAsyncCore(solicitud de mensajeSolicitudHttp, CancellationToken cancellationToken)
         at System.Net.Http.HttpHttpConnectionPool.SendWithNtConnectionAuthAsync(HttpConnection connection, solicitud HttpRequestMessage, boolean doRequestAuth, CancellationToken cancellationToken)
         at System.Net.Http.HttpHttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, boolean doRequestAuth, CancellationToken cancellationToken)
         at System.Net.Http.DiagnosticsHandler.SendAsync(solicitud de mensaje de solicitud Http, CancellationToken cancellationToken)
         at System.Net.Http.HttpClient.FinishSendAsyncBuffered(Tarea'1 sendTask, solicitud HttpRequestMessage, CancellationTokenSource cts, Boolean disposeCts)
         en Ocelot.Requester.HttpClientHttpRequester.GetResponse(HttpContext httpContext) errores encontrados en ResponderMiddleware. Configuración de respuesta de error para la ruta de solicitud:/test1/home/index, método de solicitud: GET
Usando Fiddler para capturar los paquetes de la siguiente manera, descubrí que la galleta tiene una cadena china, que es la siguiente:




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


El navegador escribe un código de cookie (El siguiente valor de código no se escapa) puede reproducir el problema:

La consola del navegador escribe cookies
https://www.itsvse.com/thread-4682-1-1.html
Intenta vaciar la caché de cookies y la pasarela vuelve a la normalidad, como se muestra en la imagen de abajo:



El orden de ejecución del middleware con Ocelot es el siguiente:

PreErrorResponderMiddleware
PreAutenticationMiddleware
Middleware de autenticación
PreAutorizaciónMiddleware
Middleware de autorización       
PreQueryStringBuilderMiddleware


(Fin)




Anterior:ASP.NET Core recibe el enlace completo de la URL de solicitud
Próximo:Prueba de rendimiento Redis Benchmark
Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com