web-dev-qa-db-ja.com

管理されたIISモジュールでHTTPヘッダーを正しく設定する方法

私は独自のマネージドIIS HTTPモジュールをC#で記述しました。これは、ある条件でX-Forwarded-ForおよびX-Forwarded-Protoリクエストヘッダーを単に設定することを目的としています(これは、ルーティングルールで処理されます。モジュールはロードバランサーにデプロイする必要があります(これは、IISインストールされたARRおよび構成済みサーバーファームを使用した場合に限ります)。いくつかの理由により、ヘッダーは設定されていますが、ロードバランサーの背後にあるWebサーバーに送信されました。失敗した要求トレースの出力ログを確認したのでわかりました Failed Request Tracing logs

ロードバランサにインストールされているすべてのIISモジュールのスクリーンショットです。

Ordered module list

ご覧のとおり、「QA.XForwardedHeadersModule」というマネージモジュールは、ApplicationRequestRouting(ARR)ネイティブモジュールの前に読み込まれます。しかし、ヘッダーはとにかく送信されません。 Wiresharkを使用して自分の要求を追跡しました。 X-Forwardedヘッダーはまったくありません。

これは、マネージモジュールがネイティブモジュールと完全に互換性がなく、ネイティブモジュール(ARRなど)がマネージモジュールで設定された要求ヘッダー(カスタム作成モジュールなど)を表示できないことを意味しますか?この問題に対する可能な回避策はありますか?

34
Dobby007

これは古い「未回答」の投稿なので、2セント追加すると思いました。 ARRモジュール/ハンドラーがリクエストを処理する方法によっては、リクエストヘッダーの追加が一般的に機能しない場合があります。 Tarunが言及したように、それは遅すぎるかもしれませんが、別の理由があります。 ARRモジュールが受信中の生データを取得している可能性があります。その場合、明らかに手遅れになります。または、ARRハンドラーが通知の前に設定された元のヘッダーを含む特定のサーバー変数を調べている可能性があります(たとえば、リクエストヘッダーを追加してもALL_RAWが更新されないと思います)。それを乗り越えて、生データを更新する必要があります。これは、可能であれば、まったく新しいレベルの複雑さです。

1
Brian Clink