System.Uri
a Host
, Authority
et DnsSafeHost
. MS fournit un bel exemple de la différence entre Host
et DnsSafeHost
here .
Je voudrais un exemple similaire/explication pour Host
et Authority
.
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:
http://www.example.com/
Authority =www.example.com
Nom d'hôte =www.exemple.com
http://255.255.255.255:8080/
Authority =255.255.255.255:8080
Nom d'hôte =255.255.255.255
De MSDN URI.Host page.
Contrairement à la propriété Authority, cette valeur de propriété n'inclut pas le numéro de port.
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.
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
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.
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:
Un composant facultatif autorité précédé de deux barres obliques (//), comprenant:
Pour plus de détails, vous pouvez vous référer à https://en.wikipedia.org/wiki/URL .
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