System.Uri
hat Host
, Authority
und DnsSafeHost
. MS liefert ein schönes Beispiel dafür, wann Host
und DnsSafeHost
sind hier anders .
Ich hätte gerne ein ähnliches Beispiel / eine ähnliche Erklärung für Host
und Authority
.
Antworten:
Ja, Brandon ist absolut richtig, was Laien betrifft
Autorität = Hostname + Port-Nr
Wenn das URL-Protokoll einen Standardport verwendet, z. B. Port 80 für http-URL, dann nur in diesem Fall Authority = Host Name (Port Nr. Wird als 80 angenommen).
Während der Hostname entweder der Domänenname oder die IP-Adresse ist
Beispiel:
http://www.example.com/
Authority = www.example.com
Hostname = www.example.com
http://255.255.255.255:8080/
Autorität = 255.255.255.255:8080
Hostname = 255.255.255.255
User Information
Teil verpasst .
Von der MSDN URI.Host- Seite.
Im Gegensatz zur Authority-Eigenschaft enthält dieser Eigenschaftswert nicht die Portnummer.
Jede HTTP-URL entspricht der Syntax eines generischen URI. Die generische URI-Syntax besteht aus einer hierarchischen Folge von fünf Komponenten:
URI = scheme:[//authority]path[?query][#fragment]
wobei sich die Berechtigungskomponente in drei Unterkomponenten unterteilt:
authority = [userinfo@]host[:port]
So was:
Eine optionale Berechtigungskomponente, der zwei Schrägstriche (//) vorangestellt sind, bestehend aus:
Weitere Informationen finden Sie unter https://en.wikipedia.org/wiki/URL .
Für die Uri-Klasse in .NET enthält Authority den Port, Host nicht und auch keine Benutzerinformationen.
Einige Beispiele für gültige URIs:
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));
Gemäß RFC3986 , Kapitel 3.2 die Behörde enthält
NICHT nur Host- und Portnummer.
Das Folgende ist beispielsweise ein gültiger URI:
http://user:password@host:80/path
in dem sich die Behörde befindet
user:password@host:80
Das at-Symbol (@) begrenzt die Benutzerinformationen vom Host und der Doppelpunkt (:) begrenzt den Host von der Portnummer. Innerhalb der Benutzerinformationen trennt ein Doppelpunkt (:) den Benutzernamen vom Passwort. (Ja, ich weiß, dass der Kennwortteil veraltet ist. Optional wird er möglicherweise weiterhin unterstützt.)
Dies ist die vollständige Spezifikation für eine Behörde. Offensichtlich sind die Benutzerinformationen und die Portnummer oft nicht vorhanden.
Die Uri-Klasse in .NET löscht die Benutzerinformationen bei der Rückgabe der Berechtigung, was ziemlich ärgerlich ist, weil es nicht korrekt ist. Stattdessen finden Sie die Benutzerinformationen in der UserInfo-Eigenschaft:
Uri.UserInfo
Andere Antworten sind technisch korrekt, um zu sagen, dass für die .NET Uri-Klasse der Unterschied zwischen Uri.Authority und Uri.Host darin besteht, dass der Host keine Portnummer enthält.
Beachten Sie jedoch, dass die Berechtigung für die Verwendung in der .NET Uri-Klasse nicht ordnungsgemäß definiert ist, da sie möglicherweise auch Benutzerinformationen enthält.
Gemäß der Dokumentation, mit der Sie verlinkt haben, enthält die Authority
Eigenschaft die Portnummer, wenn sie nicht mit dem Standardport des Uri identisch ist, während die Host
Eigenschaft nur den DNS-Hostnamen oder die IP-Adresse zurückgibt.
Ich glaube nicht, dass es mehr Unterschiede gibt.
Die Autorität kann auch einen Benutzernamen und ein Passwort enthalten, z
bob: pwd@somewhere.example.com
häufiger für FTP-URIs verwendet