이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 40852|회답: 0

[ASP.NET] Ocelot 요청 헤더는 ASCII 문자만 포함해야 합니다

[링크 복사]
게시됨 2021. 5. 10. 오후 3:24:29 | | | |
복습:

Ocelot 시리즈 (1) ASP.NET 코어 게이트웨이 실제로는
https://www.itsvse.com/thread-9284-1-1.html


오셀롯 게이트웨이를 시작하면 접근 인터페이스에 다음과 같은 오류가 보고됩니다:
상태 코드: 502; 나쁜 게이트웨이                                                                                                                                                                                                                                                                                                                                                                                                                      
이 프로젝트는 Core 3.1 ASP.NET 입니다.Ocelot에서 사용하는 버전은 16.0.1입니다



info: Ocelot.RateLimit.Middleware.ClientRateLimitMiddleware[0]
      requestId: 0HM8JAOKL2C09:00000006, 이전 requestId: 이전 요청 ID가 없음, 메시지: EndpointRateLimiting은 /{url}에 대해 활성화되어 있지 않습니다
warn: Ocelot.Responder.Middleware.ResponderMiddleware[0]
      requestId: 0HM8JAOKL2C09:00000006, 이전 requestId: 이전 요청 ID가 없음, 메시지: 오류 코드: ConnectionToDownstreamService오류 메시지: Error Connection to downstream service, 예외: System.Net.Http.HttpRequestException: 요청 헤더는 ASCII 문자만 포함해야 합니다.
         System.Net.Http.HttpConnection.WriteStringAsync(String s)
         at System.Net.Http.HttpConnection.WriteHeadersAsync(HttpHeaders 헤더, 문자열 쿠키 FromContainer)
         System.Net.Http.HttpConnection.SendAsyncCore(HttpRequestMessage request, CancellationToken cancellationToken)
         at System.Net.Http.HttpConnectionPool.SendWithNtConnectionAuthAsync(HttpConnection connection, HttpRequestMessage request, Boolean doRequestAuth, CancellationToken cancellationToken)
         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)
         ResponderMiddleware에서 발견된 오류는 Ocelot.Requester.HttpClientHttpRequester.GetResponse(HttpContext httpContext) 요청 경로에 대한 오류 응답 설정 :/test1/home/index, 요청 메서드: GET
Fiddler를 사용해 패킷을 다음과 같이 잡아보니, 쿠키에 중국어 문자열이 있다는 것을 알게 되었습니다:




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


브라우저는 쿠키 코드를 작성합니다 (다음 코드 값은 이스케이프되지 않습니다)는 다음과 같은 문제를 재현할 수 있습니다:

브라우저 콘솔이 쿠키를 작성합니다
https://www.itsvse.com/thread-4682-1-1.html
쿠키 캐시를 비우려고 하면 아래 이미지와 같이 게이트웨이가 정상으로 돌아옵니다:



Ocelot과 함께 미들웨어의 실행 순서는 다음과 같습니다:

프리에러리스폰더미들웨어
프리인증미들웨어
인증미들웨어
사전 승인 미들웨어
인증미들웨어       
PreQueryStringBuilderMiddleware


(끝)




이전의:ASP.NET Core가 요청 전체 URL 링크를 받습니다
다음:레디스 벤치마크 성능 테스트
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com