Quelle est la différence entre Uri.Hôte et Uri.Autorité

System.Uri a Host, Authority, et DnsSafeHost. MS fournit un bon exemple lorsque Host et DnsSafeHost sont différents ici.

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

54
demandé sur hippietrail 2010-01-27 00:50:22

5 réponses

Oui Brandon est tout à fait correct, en termes profanes

Autorité = Nom D'Hôte + Numéro De Port

Et si le protocole URL utilise un port par défaut, disons le port 80 pour l'URL http, alors seulement dans ce cas Authority = nom D'hôte (le Port No est supposé être 80),

Alors que le nom D'hôte est un nom de domaine ou une adresse IP

Exemple:

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

    l'Autorité = www.example.com
    Nom d'Hôte = www.example.com

  2. http://255.255.255.255:8080/

    L'Autorité = 255.255.255.255:8080
    Nom D'Hôte = 255.255.255.255

61
répondu Saurabh Mishra 2014-01-06 13:20:18

Depuis MSDN URI.Accueil page.

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

32
répondu kervin 2010-01-26 21:54:46

Selon la documentation à laquelle vous avez lié, la propriété Authority inclura le numéro de port s'il n'est pas le même que le port par défaut de L'Uri, tandis que la propriété Host ne retournera que le nom d'hôte DNS ou L'adresse IP.

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

8
répondu Brandon 2010-01-26 21:55:18

Pour la classe Uri dans. NET, Authority inclut le port, Host ne le fait pas et ne comprend pas non plus les informations 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, la Section 3.2 l'Autorité contient

  1. Informations Utilisateur
  2. hôte
  3. Numéro de Port.

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

Par exemple, ce qui suit est 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 du numéro de port. Dans les informations utilisateur, un deux-points (:) délimite le nom d'utilisateur du mot de passe. (Oui, je sais que la partie du mot de passe est obsolète. Il peut encore éventuellement être pris en charge.)

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

La classe Uri dans. NET supprime les informations utilisateur lorsque renvoyer l'autorité ce qui est plutôt ennuyeux parce que ce n'est pas correct. Au lieu de cela, vous pouvez trouver les informations utilisateur dans la propriété UserInfo:

Uri.UserInfo

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

Mais sachez que l'Autorité N'est pas correctement définie comme elle est utilisée dans la classe. net Uri car elle peut aussi contient des informations utilisateur.

7
répondu Steve Lautenschlager 2016-09-10 23:28:38

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

Bob:pwd@somewhere.example.com

Plus couramment utilisé pour les URI FTP

-1
répondu Adrien 2016-04-08 04:30:00