Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 40852|Resposta: 0

[ASP.NET] Os cabeçalhos de Solicitação Ocelot devem conter apenas caracteres ASCII

[Copiar link]
Publicado em 10/05/2021 15:24:29 | | | |
Revisar:

Série Ocelot (1) ASP.NET Gateway Core na prática
https://www.itsvse.com/thread-9284-1-1.html


Quando você inicia o gateway oceloti, o seguinte erro é reportado para a interface de acesso:
Código de status: 502; Portal Ruim                                                                                                                                                                                                                                                                                                                                                                                                                      
O projeto é ASP.NET Core 3.1,A versão usada pelo Ocelot é a 16.0.1



info: Ocelot.RateLimit.Middleware.ClientRateLimitMiddleware[0]
      requestId: 0HM8JAOKL2C09:00000006, previousRequestId: sem id de solicitação anterior, mensagem: EndpointRateLimiting não está ativado para /{url}
warn: Ocelot.Responder.Middleware.ResponderMiddleware[0]
      requestId: 0HM8JAOKL2C09:00000006, previousRequestId: sem id de solicitação anterior, mensagem: Código de Erro: ConnectionToDownstreamServiceMensagem de Erro: Erro conectando ao serviço downstream, exceção: System.Net.Http.HttpHttpRequestException: Os cabeçalhos de requisição devem conter apenas caracteres ASCII.
         at System.Net.Http.HttpHttpConnection.WriteStringAsync(String s)
         at System.Net.Http.HttpHttpConnection.WriteHeadersAsync(cabeçalhos HttpHeaders, String cookiesFromContainer)
         at System.Net.Http.HttpHttpConnection.SendAsyncCore(solicitação HttpRequestMessage, cancellationToken cancellationToken)
         at System.Net.Http.HttpHttpConnectionPool.SendWithNtConnectionAuthAsync(HttpConnection connection, solicitação HttpRequestMessage, Boolean doRequestAuth, CancellationToken cancellationToken)
         at System.Net.Http.Http.HttpConnectionPool.SendWithRetryAsync(HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
         at System.Net.Http.DiagnosticsHandler.SendAsync(solicitação de HttpRequestMessage, CancellationToken cancellationToken)
         at System.Net.Http.HttpHttpClient.FinishSendAsyncBuffered(Task'1 sendTask, HttpRequestMessage request, CancellationTokenSource cts, Boolean disposeCts)
         em Ocelot.Requester.HttpClientHttpRequester.GetResponse(HttpContext httpContext) erros encontrados no ResponderMiddleware. Definindo resposta de erro para o caminho de requisição:/test1/home/index, método de requisição: GET
Usando o Fiddler para capturar pacotes da seguinte forma, descobri que o cookie tem uma string chinesa, da seguinte forma:




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


O navegador escreve um código de cookie (O seguinte valor de código não é escapado) pode reproduzir a questão:

Console do navegador grava cookies
https://www.itsvse.com/thread-4682-1-1.html
Tente esvaziar o cache de cookies e o gateway retorna ao normal, como mostrado na imagem abaixo:



A ordem de execução do middleware com o Ocelot é a seguinte:

PreErrorResponderMiddleware
Middleware de Pré-Autenticação
Middleware de autenticação
PreAuthorisationMiddleware
Middleware de Autorização       
PreQueryStringBuilderMiddleware


(Fim)




Anterior:ASP.NET Core recebe o link da URL completa para solicitar
Próximo:Teste de desempenho Redis Benchmark
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com