web-dev-qa-db-fra.com

Quelle est la différence entre Uri.Host et Uri.Authority

System.Uri a Host, Authority et DnsSafeHost. MS fournit un bel exemple de la différence entre Host et DnsSafeHosthere .

Je voudrais un exemple similaire/explication pour Host et Authority.

60
Brian

Oui, Brandon a tout à fait raison, en termes simples

Autorité = nom d'hôte + numéro de port

Et si le protocole d'URL utilise un port par défaut, dites le port 80 pour l'URL http, alors seulement dans ce cas Authority = Nom d'hôte (le port n ° est supposé être 80),

Considérant que le nom d'hôte est soit un nom de domaine, soit une adresse I.P

Exemple:

  1. http://www.example.com/ 

    Authority =www.example.com
    Nom d'hôte =www.exemple.com

  2. http://255.255.255.255:8080/

    Authority =255.255.255.255:8080
    Nom d'hôte =255.255.255.255

71
Saurabh Mishra

De MSDN URI.Host page.

Contrairement à la propriété Authority, cette valeur de propriété n'inclut pas le numéro de port.

33
kervin

Selon la documentation à laquelle vous avez accédé, la propriété Authority inclut le numéro de port s'il diffère du port par défaut de l'Uri, tandis que la propriété Host renvoie uniquement le nom d'hôte DNS ou l'adresse IP.

Je ne crois pas qu'il y ait plus de différences que cela.

9
Brandon

Pour la classe Uri dans .NET, Authority inclut le port, mais pas Host, ni les informations sur l'utilisateur.

Quelques exemples d'URI valides:

Uri u = new Uri("http://www.domain.com/path");
Assert.AreEqual("www.domain.com", u.Authority);
Assert.AreEqual("www.domain.com", u.Host);
Assert.AreEqual("http://www.domain.com", u.GetLeftPart(UriPartial.Authority));

u = new Uri("http://www.domain.com:8080/path");
Assert.AreEqual("www.domain.com:8080", u.Authority);
Assert.AreEqual("www.domain.com", u.Host);
Assert.AreEqual("http://www.domain.com:8080", u.GetLeftPart(UriPartial.Authority));

u = new Uri("http://user:password@Host:555/path");
Assert.AreEqual("Host:555", u.Authority);
Assert.AreEqual("Host", u.Host);
Assert.AreEqual("http://user:password@Host:555", u.GetLeftPart(UriPartial.Authority));

Selon RFC3986 , Section 3.2 l’autorité contient 

  1. Informations de l'utilisateur
  2. Hôte
  3. Numéro de port. 

Pas seulement l'hôte et le numéro de port.

Par exemple, voici un URI valide:

http://user:password@Host:80/path

dans lequel l'Autorité est

user:password@Host:80

Le symbole at (@) délimite les informations utilisateur de l'hôte et les deux points (:) délimitent l'hôte à partir du numéro de port. Dans les informations utilisateur, deux points (:) délimitent le nom d'utilisateur du mot de passe. (Oui, je sais que la partie mot de passe est obsolète. Elle peut toujours être prise en charge.)

Ceci est la spécification complète pour une autorité. De toute évidence, les informations utilisateur et le numéro de port ne sont souvent pas présents.

La classe Uri dans .NET supprime les informations sur l'utilisateur lors du renvoi de l'autorité, ce qui est plutôt gênant car incorrect. À la place, vous pouvez trouver les informations sur l'utilisateur dans la propriété UserInfo:

Uri.UserInfo

D’autres réponses sont techniquement correctes pour dire que pour la classe .NET Uri que la différence entre Uri.Authority et Uri.Host est que l’hôte ne contiendra pas de numéro de port.

Mais sachez que Authority n'est pas correctement défini comme il est utilisé dans la classe .NET Uri car il peut également contenir des informations sur l'utilisateur.

8

Chaque URL HTTP est conforme à la syntaxe d'un URI générique. La syntaxe générique d'URI consiste en une séquence hiérarchique de cinq composants:

URI = scheme:[//authority]path[?query][#fragment]

où le composant autorité se divise en trois sous-composants:

authority = [userinfo@]Host[:port]

Comme ça:

 url syntax

Un composant facultatif autorité précédé de deux barres obliques (//), comprenant:

  • Un sous-composant userinfo facultatif, pouvant être composé d'un nom d'utilisateur et d'un mot de passe facultatif, précédé de deux points (:), suivi d'un symbole at (@). L'utilisation du format nom d'utilisateur: mot de passe dans le sous-composant userinfo est obsolète pour des raisons de sécurité. Les applications ne doivent pas restituer sous forme de texte en clair des données après le premier deux-points (:) trouvées dans un sous-composant userinfo, sauf si les données après les deux-points sont la chaîne vide (sans mot de passe).
  • Un sous-composant hôte facultatif, constitué d'un nom enregistré (y compris, sans toutefois s'y limiter, d'un nom d'hôte) ou d'une adresse IP. Les adresses IPv4 doivent être en notation décimale à point et les adresses IPv6 doivent être placées entre crochets ([]).
  • Un sous-composant port facultatif, précédé de deux points (:).

Pour plus de détails, vous pouvez vous référer à https://en.wikipedia.org/wiki/URL .

3
Frank.Chang

L'autorité peut également inclure un nom d'utilisateur et un mot de passe, par exemple.

bob: [email protected]

plus couramment utilisé pour les URI FTP

0
Adrien