В чем разница между Uri.Host и Uri.Authority - PullRequest
68 голосов
/ 27 января 2010

System.Uri имеет Host, Authority и DnsSafeHost. MS дает хороший пример того, когда Host и DnsSafeHost отличаются здесь .

Я бы хотел подобный пример / объяснение для Host и Authority.

Ответы [ 6 ]

81 голосов
/ 06 января 2014

Да, Брэндон абсолютно прав, с точки зрения непрофессионала

Authority = Имя хоста + Номер порта

И если протокол URL-адреса использует порт по умолчанию, скажем, порт 80 для URL-адреса http, то только в этом случае Authority = имя хоста (номер порта предполагается равным 80),

В то время как имя хоста является либо доменным именем, либо адресом I.P

Пример:

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

    Authority = www.example.com
    Имя хоста = www.example.com

  2. http://255.255.255.255:8080/

    Полномочия = 255.255.255.255:8080
    Имя хоста = 255.255.255.255

34 голосов
/ 27 января 2010

Из MSDN URI.Host страница.

В отличие от свойства Authority, значение этого свойства не включает номер порта.

10 голосов
/ 09 сентября 2016

Для класса 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 Орган содержит

  1. Информация о пользователе
  2. Хост
  3. Номер порта.

НЕ только хост и номер порта.

Например, следующий действительный URI:

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

, в котором Органом является

user:password@host:80

Символ at (@) отделяет информацию пользователя от хоста, а двоеточие (:) отделяет хост от номера порта. В пользовательской информации двоеточие (:) отделяет имя пользователя от пароля. (Да, я знаю, что часть пароля устарела. Она все еще может поддерживаться.)

Это полная спецификация для Органа. Очевидно, что информация о пользователе и номер порта часто отсутствуют.

Класс Uri в .NET отбрасывает информацию пользователя при возврате полномочий, что довольно раздражает, потому что это не правильно. Вместо этого вы можете найти информацию о пользователе в свойстве UserInfo:

Uri.UserInfo

Другими технически правильными являются ответы: для класса .NET Uri , что разница между Uri.Authority и Uri.Host заключается в том, что хост не будет содержать номер порта. .

Но, пожалуйста, знайте, что Полномочия определены неправильно, как он используется в классе .NET Uri , поскольку он также может содержать информацию о пользователе.

10 голосов
/ 27 января 2010

Согласно документации, к которой вы привязаны, свойство Authority будет содержать номер порта, если он не совпадает с портом Uri по умолчанию, а свойство Host будет возвращать только имя или IP-адрес узла DNS. Адрес.

Я не верю, что есть больше различий, чем это.

4 голосов
/ 14 ноября 2018

Каждый HTTP-URL соответствует синтаксису универсального URI. Общий синтаксис URI состоит из иерархической последовательности из пяти компонентов:

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

, где компонент полномочия делится на три подкомпонента:

authority = [userinfo@]host[:port]

Как это:

url syntax

Необязательный элемент права доступа , которому предшествуют две косые черты (//), содержащие:

  • Необязательный подкомпонент userinfo , который может состоять из имени пользователя и необязательного пароля, перед которым стоит двоеточие (:), за которым следует символ at (@). Использование формата username: password в подкомпоненте userinfo не рекомендуется из соображений безопасности. Приложения не должны отображать в виде открытого текста любые данные после первого двоеточия (:), найденного в подкомпоненте userinfo, если только данные после двоеточия не являются пустой строкой (без указания пароля).
  • Необязательный подкомпонент host , состоящий из зарегистрированного имени (включая, но не ограничиваясь именем хоста), или IP-адреса. Адреса IPv4 должны быть в точечно-десятичной записи, а адреса IPv6 должны быть заключены в квадратные скобки ([]).
  • Необязательный субкомпонент port , которому предшествует двоеточие (:).

Для более подробной информации, вы можете обратиться к https://en.wikipedia.org/wiki/URL.

0 голосов
/ 08 апреля 2016

Полномочия также могут включать имя пользователя и пароль, например,

боб: pwd@somewhere.example.com

чаще используется для FTP URI

...