HttpListenerElement.UnescapeRequestUrl Propriété
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Obtient une valeur qui indique si HttpListener utilise l'URI brut sans séquence d'échappement plutôt que l'URI converti.
public:
property bool UnescapeRequestUrl { bool get(); };
[System.Configuration.ConfigurationProperty("unescapeRequestUrl", DefaultValue=true, IsRequired=false)]
public bool UnescapeRequestUrl { get; }
[<System.Configuration.ConfigurationProperty("unescapeRequestUrl", DefaultValue=true, IsRequired=false)>]
member this.UnescapeRequestUrl : bool
Public ReadOnly Property UnescapeRequestUrl As Boolean
Valeur de propriété
Valeur booléenne qui indique si HttpListener utilise l'URI brut sans séquence d'échappement plutôt que l'URI converti.
- Attributs
Remarques
La UnescapeRequestUrl propriété indique si HttpListener utilise l’URI brut sans séquence d’échappement au lieu de l’URI converti où toutes 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) du serveur HTTP fait référence à cet URI converti en tant que 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. En outre, http.sys
et la System.Uri classe 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 la propriété a la UnescapeRequestUrl valeur false, lorsque le HttpListener reçoit une requête, il utilise l’URI brut au lieu de l’URI converti de http.sys
comme entrée à la Url propriété.