この記事は機械翻訳のミラー記事です。元の記事にジャンプするにはこちらをクリックしてください。

眺める: 40852|答える: 0

[ASP.NET] オセロットリクエストヘッダーはASCII文字のみでなければなりません

[リンクをコピー]
掲載地 2021/05/10 15:24:29 | | | |
復習:

オセロットシリーズ(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エラーメッセージ: Error Connecting to downstream service, 例外:System.Net.Http.HttpRequest例外:リクエストヘッダーはASCII文字のみでなければなりません。
         System.Net.Http.HttpConnection.WriteStringAsync(String s)
         at System.Net.Http.HttpConnection.WriteHeadersAsync(HttpHeaders ヘッダー、String cookiesFromContainer)
         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で検出されたエラー。 リクエストパス:/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でのミドルウェアの実行順は以下の通りです:

PreErrorResponderMiddleware
PreAuthenticationMiddleware
認証ミドルウェア
事前認可ミドルウェア
認証ミドルウェア       
PreQueryStringBuilderMiddleware


(終わり)




先の:ASP.NET Coreはリクエストの完全なURLリンクを取得します
次に:Redis ベンチマーク性能テスト
免責事項:
Code Farmer Networkが発行するすべてのソフトウェア、プログラミング資料、記事は学習および研究目的のみを目的としています。 上記の内容は商業的または違法な目的で使用されてはならず、そうでなければ利用者はすべての結果を負うことになります。 このサイトの情報はインターネットからのものであり、著作権紛争はこのサイトとは関係ありません。 ダウンロード後24時間以内に上記の内容を完全にパソコンから削除してください。 もしこのプログラムを気に入ったら、正規のソフトウェアを支持し、登録を購入し、より良い本物のサービスを受けてください。 もし侵害があれば、メールでご連絡ください。

Mail To:help@itsvse.com