Partager via


Chaînes UrlPrefix

Dans l’API serveur HTTP, un UrlPrefix est une chaîne Unicode à caractères larges (UTF-16) avec un formulaire canonique qui spécifie une section d’espace de noms d’URL. Il est utilisé pour réserver une section d’espace de noms d’URL pour un compte d’utilisateur ou inscrire une section d’espace de noms d’URL pour un processus.

UrlPrefix Format

Une URLPrefix a la syntaxe suivante :

« scheme ://host :port/relativeURI »

Le schéma, l’hôte et les éléments de port d’une UrlPrefix doivent être présents et non vides et doivent respecter les règles suivantes :

schéma de

Doit être http ou https, tous en minuscules.

hôte

Doit être un nom de domaine complet, une chaîne littérale IPv4 ou IPv6 ou un caractère générique. Contrairement au schéma, qui doit être en minuscules, la partie hôte ne respecte pas la casse. Selon la façon dont sa partie hôte est spécifiée, une URLPrefix se trouve dans l’une des quatre catégories de routage suivantes, qui sont décrites plus en détail ci-dessous :

Caractère générique fort
Explicite
Caractère générique faible lié à l’adresse IP
Caractère générique faible

port

Chaîne numérique décimale qui ne commence pas par zéro et qui représente un numéro de port TCP valide (1 à 65 535). Cette valeur ne peut pas être un caractère générique.

relativeURI

L’élément relativeURI est facultatif, mais s’il est présent, il doit toujours être suivi d’une barre oblique (« / »). Il s’agit d’une chaîne de préfixe qui indique une sous-arborescence dans l’espace de noms de l’ordinateur spécifié par rapport au schéma, à l’hôte et aux valeurs de port. Contrairement au schéma, qui doit être en minuscules, la partie relativeURI ne respecte pas la casse.

Voici quelques exemples d’URLPrefixes correctement formées :

  • https://www.adatum.com:80/vroot/
  • https://adatum.com:443/secure/database/
  • https://+:80/vroot/

catégories Host-Specifier

Pour une flexibilité et une facilité d’utilisation, l’API serveur HTTP prend en charge quatre façons différentes de spécifier des hôtes. Les quatre catégories de spécificateur d’hôte sont répertoriées ci-dessous dans l’ordre de priorité :

caractère générique fort (signe Plus)

Lorsque l’élément hôte d’une URLPrefix se compose d’un signe plus unique (+), UrlPrefix correspond à tous les noms d’hôtes possibles dans le contexte de son schéma, de son port et de ses éléments relativeURI, et se trouve dans la catégorie générique forte.

Un caractère générique fort est utile lorsqu’une application doit traiter les demandes adressées à un ou plusieurs relativeURIs, quelle que soit la façon dont ces requêtes arrivent sur l’ordinateur ou quel site ils spécifient dans leurs en-têtes d’hôte. L’utilisation d’un caractère générique fort dans cette situation évite la nécessité de spécifier une liste exhaustive d’adresses IP et/ou d’hôte.

explicite

Un nom d’hôte explicite tel qu’un nom de domaine complet dans l’élément hôte place une URLPrefix dans la catégorie explicite. Ce type d’élément hôte est mis en correspondance directement par rapport aux en-têtes d’hôte des requêtes entrantes.

Les spécifications d’hôte explicites sont utiles pour les applications multis sites, telles que les serveurs web qui fournissent du contenu différent en fonction du site vers lequel la requête a été dirigée.

caractère générique faible lié à IP

Lorsqu’une adresse IP apparaît en tant qu’élément hôte, l’URLPrefix se trouve dans la catégorie caractère générique faible lié à l’adresse IP. Ce type d’UrlPrefix correspond à n’importe quel nom d’hôte pour l’interface IP spécifiée avec le schéma, le port et le relativeURI spécifiés, et qui n’a pas déjà été mis en correspondance par un caractère générique fort ou une URLPrefix explicite. L’adresse IP prend l’une des deux formes de l’élément hôte :

chaîne littérale IPv4

Un littéral IPv4 se compose de quatre nombres décimaux en pointillés, chacun dans la plage 0-255, par exemple 192.168.0.0.

chaîne littérale IPv6

Une chaîne littérale IPv6 est placée entre crochets et contient des nombres hexadécimaux séparés par des deux-points ; par exemple : [ ::1] ou [3ffe :ffff ::6ECB :0101].

Les spécificateurs d’hôtes à caractères génériques faibles liés à l’adresse IP sont destinés aux applications qui varient le contenu qu’ils servent en fonction de l’itinéraire effectué par les requêtes entrantes. Ne vous fiez pas aux spécificateurs d’hôtes génériques faibles liés à l’adresse IP pour appliquer la sécurité.

caractère générique faible (astérisque)

Lorsqu’un astérisque (*) apparaît en tant qu’élément hôte, l’URLPrefix tombe dans la catégorie générique faible. Ce type d’UrlPrefix correspond à n’importe quel nom d’hôte associé au schéma, au port et à la relativeURI spécifiés qui n’ont pas déjà été mis en correspondance par un caractère générique fort, explicite ou LIÉ à l’adresse IP UrlPrefix.

Cette spécification d’hôte peut être utilisée comme catch-all par défaut dans certaines circonstances, ou peut être utilisée pour spécifier une grande section d’espace de noms d’URL sans avoir à utiliser de nombreux UrlPrefixes.

Détection des conflits UrlPrefix lors de la réservation et de l’inscription

À des fins de réservation et d’inscription, les quatre catégories différentes d’UrlPrefix sont traitées séparément, sans référence les unes aux autres. Il est possible d’inscrire des URLPrefixes en conflit tant qu’elles se trouvent dans différentes catégories. Dans la même catégorie, un conflit entraîne l’échec d’une tentative de réservation.

Par exemple, il serait possible de réserver à la fois le https://www.adatum.com:80/vroot/ UrlPrefix explicite et le caractère générique fort en conflit UrlPrefix https://+:80/vroot/, car ils appartiennent à différentes catégories. Toutefois, une tentative ultérieure de réserver https://+:80/vroot/ à un autre utilisateur échouerait, car elle serait en conflit avec une réservation existante dans sa propre catégorie.

Comportement de routage

Lors du routage d’une requête HTTP entrante, l’API serveur HTTP commence par la catégorie générique forte et compare l’URL entrante aux URL inscrites et réservées dans cette catégorie.

Si l’URL entrante correspond à une réservation, mais pas à une inscription, l’API serveur HTTP échoue la requête. Cela empêche les inscriptions de priorité inférieure de pouvoir récupérer les demandes non prévues. L’état en cas d’échec est 400 (« Demande incorrecte ») plutôt que 503 (« Service non disponible »), car un retour 503 est parfois interprété par des passerelles d’équilibrage de charge comme indiquant que le serveur a été surchargé.

Si une inscription correspondante se trouve dans la catégorie, la demande est acheminée vers la file d’attente de requêtes associée à cette inscription. La requête est toujours acheminée vers la file d’attente associée au plus long urlPrefix correspondant dans une catégorie.

Si aucune correspondance n’est trouvée dans la catégorie, l’API serveur HTTP passe à la catégorie explicite et répète la même procédure. Pour résumer, l’ordre dans lequel les catégories sont examinées est le suivant :

  1. Caractère générique fort
  2. Explicite
  3. IP-Bound caractère générique faible
  4. Caractère générique faible

Si aucune correspondance n’est trouvée dans l’une des catégories, l’API serveur HTTP envoie une réponse avec un code d’état 400 pour indiquer que la requête ne peut pas être routée.

Règle de correspondance la plus longue

Dans chaque catégorie UrlPrefix, l’API serveur HTTP achemine une requête vers la file d’attente associée au plus long urlPrefix correspondant. Par exemple, supposons que les deux URLPrefixes suivantes sont inscrites dans différentes files d’attente :

  • Queue1 https://www.adatum.com:80/
  • Queue2 https://www.adatum.com:80/dir/sna/

L’API du serveur HTTP achemine une requête de https://www.adatum.com:80/default.htm vers File d’attente1 et une demande d'https://www.adatum.com:80/dir/sna/snadefault.htm vers File d’attente2. Il achemine une demande de https://www.adatum.com:80/dir/app.htm vers File d’attente1, car la correspondance complète la plus longue est avec le https://www.adatum.com:80/ UrlPrefix, et non avec le https://www.adatum.com:80/dir/sna UrlPrefix.