<httpListener> 要素 (ネットワーク設定)
HttpListener クラスによって使用されるパラメーターをカスタマイズします。
configuration
<system.net>
<settings>
<httpListener>
構文
<httpListener
unescapeRequestUrl="true|false"
/>
種類
属性および要素
以降のセクションでは、属性、子要素、および親要素について説明します。
属性
属性 | 説明 |
---|---|
unescapeRequestUrl | HttpListener インスタンスが変換された URI ではなくエスケープされていない生の URI を使用するかどうかを示すブール値。 |
子要素
なし。
親要素
要素 | 説明 |
---|---|
設定 | System.Net 名前空間の基本的なネットワーク オプションを構成します。 |
解説
unescapeRequestUrl 属性は、HttpListener が変換された URI ではなく、エスケープされていない生の URI を使用するかどうかを示します。変換された URI では、パーセント エンコードされた値が変換され、その他の正規化手順が実行されます。
HttpListener インスタンスでは、http.sys
サービスを介して要求を受け取ると、http.sys
によって提供される URI 文字列のインスタンスを作成し、HttpListenerRequest.Url プロパティとして公開します。
http.sys
サービスでは、次の 2 つの要求 URI 文字列を公開します。
生の URI
変換された URI
生の URI は、HTTP 要求の要求ラインで指定される System.Uri です。
GET /path/
Host: www.contoso.com
前述の要求に対して http.sys
によって提供される生の URI は、"/path/" です。 これは、ネットワーク経由で送信されたため、HTTP 動詞に続く文字列を表します。
http.sys
サービスでは、HTTP 要求ラインに指定された URI とホスト ヘッダーを使用して、要求で提供される情報から変換された URI を作成し、要求の転送先となる配信元サーバーを決定します。 これは、要求の情報を一連の登録済み URI プレフィックスと比較することによって行われます。 HTTP サーバー SDK のドキュメントでは、この変換された URI を HTTP_COOKED_URL 構造体として参照します。
要求を登録済み URI プレフィックスと比較できるようにするには、要求の正規化を行う必要があります。 上の例の場合、変換された URI は次のようになります。
http://www.contoso.com/path/
http.sys
サービスでは、Uri.Host プロパティ値と要求ラインの文字列を結合して、変換された URI を作成します。 さらに、http.sys
と System.Uri クラスでは次のことも行います。
パーセント エンコードされたすべての値をエスケープ解除します。
パーセント エンコードされた非 ASCII 文字を UTF-16 文字表現に変換します。 UTF-8 文字と ANSI/DBCS 文字は、Unicode 文字 (%uXXXX 形式を使用した Unicode エンコード) 同様にサポートされていることに注意してください。
パスの圧縮など、その他の正規化手順を実行します。
パーセント エンコードされた値に使用されるエンコードに関する情報が要求に含まれていないため、パーセント エンコードされた値を解析するだけでは、正しいエンコードを判断できない場合があります。
このため、http.sys
では、プロセスを変更するために次の 2 つのレジストリ キーを使用します。
レジストリ キー | 既定値 | 説明 |
---|---|---|
EnableNonUTF8 | 1 | 0 の場合、http.sys は UTF-8 でエンコードされた URL のみを受け入れます。0 以外の場合、 http.sys は要求の中で ANSI または DBCS でエンコードされた URL も受け入れます。 |
FavorUTF8 | 1 | 0 以外の場合、http.sys では常に URL を UTF-8 としてデコードしようとします。変換に失敗し、EnableNonUTF8 が 0 以外の場合は、ANSI または DBCS としてデコードしようとします。0 (および EnableNonUTF8 が 0 以外) の場合、 http.sys では ANSI または DBCS としてデコードしようとします。成功しなかった場合は、UTF-8 変換を試行します。 |
HttpListener では、要求を受信すると、http.sys
から変換された URI を Url プロパティへの入力として使用します。
URI の文字と数字以外の文字をサポートする必要があります。 例として、次の URI があります。これは、顧客番号 "1/3812" の顧客情報を取得するために使用されます。
http://www.contoso.com/Customer('1%2F3812')/
URI のパーセント エンコードされたスラッシュ (%2F) に注意してください。 この場合、スラッシュ文字はパス区切り記号ではなくデータを表すため、これは必要です。
文字列を URI コンストラクターに渡すと、次の URI になります。
http://www.contoso.com/Customer('1/3812')/
パスをセグメントに分割すると、次の要素が生成されます。
Customer('1
3812')
これは、要求の送信者の意図ではありません。
unescapeRequestUrl 属性が false に設定されている場合、HttpListener で要求を受信すると、Url プロパティへの入力として、http.sys
から変換された URI ではなく生の URI が使用されます。
unescapeRequestUrl 属性の既定値は true です。
UnescapeRequestUrl プロパティは、該当する構成ファイルから unescapeRequestUrl 属性の現在の値を取得するために使用できます。
例
次の例は、要求を受け取ったときに、Url プロパティの入力として、http.sys
から変換された URI ではなく生の URI を使用するように HttpListener クラスを構成する方法を示しています。
<configuration>
<system.net>
<settings>
<httpListener
unescapeRequestUrl="false"
/>
</settings>
</system.net>
</configuration>
要素情報
名前空間: System.Net
関連項目
.NET
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示