Share via


<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.sysSystem.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

関連項目