Élément <httpListener> (paramètres réseau)

Personnalise les paramètres utilisés par la classe HttpListener.

<configuration>
  <system.net>
    <settings>
      <httpListener>

Syntaxe

<httpListener  
  unescapeRequestUrl="true|false"  
/>  

Type

Attributs et éléments

Les sections suivantes décrivent des attributs, des éléments enfants et des éléments parents.

Attributs

Attribut Description
unescapeRequestUrl Valeur booléenne qui indique si une instance HttpListener utilise l’URI brut sans séquence d’échappement plutôt que l’URI converti.

Éléments enfants

Aucune.

Éléments parents

Element Description
settings Configure les options réseau de base pour l’espace de noms System.Net.

Notes

L’attribut unscapeRequestUrl indique si HttpListener utilise l’URI brut sans séquence d’échappement au lieu de l’URI converti où les valeurs encodées en pourcentage sont converties et d’autres étapes de normalisation sont effectuées.

Lorsqu’une instance HttpListener reçoit une requête via le service http.sys, elle crée une instance de la chaîne d’URI fournie par http.sys et l’expose en tant que propriété HttpListenerRequest.Url.

Le service http.sys expose deux chaînes d’URI de requête :

  • URI brut

  • URI converti

L’URI brut est le System.Uri fourni dans la ligne de requête d’une requête HTTP :

GET /path/

Host: www.contoso.com

L’URI brut fourni par http.sys pour la requête mentionnée ci-dessus est « /path/ ». Cela représente la chaîne suivant le verbe HTTP tel qu’il a été envoyé sur le réseau.

Le service http.sys crée un URI converti à partir des informations fournies dans la requête à l’aide de l’URI fourni dans la ligne de requête HTTP et de l’en-tête hôte pour déterminer le serveur d’origine auquel la requête doit être transférée. Pour ce faire, les informations de la requête sont comparées à un ensemble de préfixes d’URI inscrits. La documentation du Kit de développement logiciel (SDK) HTTP Server fait référence à cet URI converti comme la structure HTTP_COOKED_URL.

Pour pouvoir comparer la requête avec les préfixes d’URI inscrits, un travail de normalisation doit être effectué. Pour l’exemple ci-dessus, l’URI converti est le suivant :

http://www.contoso.com/path/

Le service http.sys combine la valeur de propriété Uri.Host et la chaîne de la ligne de requête pour créer un URI converti. De plus, http.sys et la classe System.Uri effectuent également les opérations suivantes :

  • Annule l’échappement de toutes les valeurs encodées en pourcentage.

  • Convertit les caractères non ASCII encodés en pourcentage en représentation de caractères UTF-16. Notez que les caractères UTF-8 et ANSI/DBCS sont pris en charge ainsi que les caractères Unicode (encodage Unicode à l’aide du format %uXXXX).

  • Exécute d’autres étapes de normalisation, comme la compression de chemin d’accès.

Étant donné que la requête ne contient aucune information sur l’encodage utilisé pour les valeurs encodées en pourcentage, il peut être impossible de déterminer l’encodage correct en analysant les valeurs encodées en pourcentage.

Par conséquent http.sys fournit deux clés de Registre pour modifier le processus :

Clé de Registre Valeur par défaut Description
EnableNonUTF8 1 Si la valeur est zéro, http.sys accepte uniquement les URL encodées en UTF-8.

Si la valeur est différente de zéro, http.sys accepte également les URL encodées en ANSI ou encodées en DBCS dans les requêtes.
FavorUTF8 1 Si la valeur est différente de zéro, http.sys tente toujours de décoder d’abord une URL en UTF-8 ; si cette conversion échoue et si EnableNonUTF8 est différent de zéro, Http.sys tente de le décoder en ANSI ou en DBCS.

Si la valeur est zéro (et EnableNonUTF8 est différent de zéro), http.sys tente de la décoder en ANSI ou en DBCS ; en cas d’échec, il tente une conversion UTF-8.

Lorsque HttpListener reçoit une requête, il utilise l’URI converti en http.sys comme entrée dans la propriété Url.

Il est nécessaire de prendre en charge certains caractères en plus des caractères et des nombres dans les URI. L’exemple d’URI suivant est utilisé pour récupérer les informations client pour le numéro de client « 1/3812 » :

http://www.contoso.com/Customer('1%2F3812')/

Notez la barre oblique encodée en pourcentage dans l’URI (%2F). Cela est nécessaire, car dans ce cas, le caractère de barre oblique représente des données et non un délimiteur de chemin d’accès.

Le passage de la chaîne au constructeur d’URI entraîne l’URI suivant :

http://www.contoso.com/Customer('1/3812')/

Le fractionnement du chemin dans ses segments produit les éléments suivants :

Customer('1

3812')

Cela ne reflète pas l’intention de l’expéditeur de la requête.

Si l’attribut unscapeRequestUrl a la valeur false, lorsque HttpListener reçoit une requête, il utilise l’URI brut au lieu de l’URI converti à partir de http.sys comme entrée dans la propriété Url.

La valeur par défaut de l’attribut unescapeRequestUrl est true.

La propriété UnescapeRequestUrl permet d’obtenir la valeur actuelle de l’attribut unescapeRequestUrl à partir des fichiers de configuration applicables.

Exemple

L’exemple suivant montre comment configurer la classe HttpListener lorsqu’elle reçoit une requête pour utiliser l’URI brut au lieu de l’URI converti à partir de http.sys comme entrée dans la propriété Url.

<configuration>  
  <system.net>  
    <settings>  
      <httpListener  
        unescapeRequestUrl="false"  
      />  
    </settings>  
  </system.net>  
</configuration>  

Informations sur les éléments

Espace de noms : System.NET

Voir aussi