System.Uri
есть Host
, Authority
и DnsSafeHost
. MS дает хороший пример того, когда Host
и здесьDnsSafeHost
все по-другому .
Мне нужен аналогичный пример / объяснение для Host
и Authority
.
Ответы:
Да, Брэндон абсолютно прав, с точки зрения непрофессионала
Авторитет = Имя хоста + Номер порта
И если протокол URL использует порт по умолчанию, скажем порт 80 для URL-адреса http, то только в этом случае Authority = Host Name (номер порта предполагается равным 80),
В то время как имя хоста - это доменное имя или IP-адрес.
Пример:
http://www.example.com/
Authority = www.example.com
Имя хоста = www.example.com
http://255.255.255.255:8080/
Authority = 255.255.255.255:8080
Имя хоста = 255.255.255.255
User Information
часть.
Со страницы MSDN URI.Host .
В отличие от свойства Authority, значение этого свойства не включает номер порта.
Каждый URL-адрес HTTP соответствует синтаксису универсального URI. Общий синтаксис URI состоит из иерархической последовательности из пяти компонентов:
URI = scheme:[//authority]path[?query][#fragment]
где компонент полномочий делится на три подкомпонента:
authority = [userinfo@]host[:port]
Как это:
Необязательный компонент полномочий, которому предшествуют две косые черты (//), содержащий:
Для получения дополнительной информации вы можете обратиться к https://en.wikipedia.org/wiki/URL .
Для класса Uri в .NET Authority включает порт, Host - нет, и ни одна из них не включает информацию о пользователе.
Некоторые примеры действительных URI:
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));
Согласно RFC3986 , раздел 3.2, администрация содержит
НЕ только хост и номер порта.
Например, следующий действительный URI:
http://user:password@host:80/path
в котором Власть
user:password@host:80
Символ at (@) отделяет информацию о пользователе от хоста, а двоеточие (:) отделяет хост от номера порта. В информации о пользователе двоеточие (:) отделяет имя пользователя от пароля. (Да, я знаю, что часть пароля устарела. При желании она может поддерживаться.)
Это полная спецификация для органа. Очевидно, что информация о пользователе и номер порта часто отсутствуют.
Класс Uri в .NET сбрасывает информацию о пользователе при возврате Authority, что довольно раздражает, потому что это неверно. Вместо этого вы можете найти информацию о пользователе в свойстве UserInfo:
Uri.UserInfo
Другие ответы технически правильны, чтобы сказать, что для класса .NET Uri разница между Uri.Authority и Uri.Host заключается в том, что хост не будет содержать номер порта.
Но имейте в виду, что Authority не определен должным образом, как он используется в классе .NET Uri, поскольку он также может содержать информацию о пользователе.
Согласно документации, на которую вы ссылаетесь, Authority
свойство будет включать номер порта, если он не совпадает с портом Uri по умолчанию, в то время как Host
свойство будет возвращать только имя хоста DNS или IP-адрес.
Я не верю, что существует больше различий, чем это.
Полномочия также могут включать имя пользователя и пароль, например
bob: pwd@somewhere.example.com
чаще используется для FTP URI