Какая разница между Uri.Host и Uri.Authority

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

Мне нужен пример/объяснение для Host и Authority.

Ответ 1

Да Брэндон абсолютно прав, в условиях неспециалиста

Власть = имя хоста + порт

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

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

Пример:

  • http://www.example.com/

    Власть = www.example.com
    Имя хоста = www.example.com

  • http://255.255.255.255:8080/

    Орган = 255.255.255.255:8080
    Имя хоста = 255.255.255.255

Ответ 2

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

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

Ответ 3

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

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

Ответ 4

Для класса 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:[email protected]:555/path");
Assert.AreEqual("host:555", u.Authority);
Assert.AreEqual("host", u.Host);
Assert.AreEqual("http://user:[email protected]:555", u.GetLeftPart(UriPartial.Authority));

В соответствии с RFC3986, Раздел 3.2 Орган содержит

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

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

Например, следующее является допустимым URI:

http://user:[email protected]:80/path

в котором орган находится

user:[email protected]:80

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

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

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

Uri.UserInfo

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

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

Ответ 5

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

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

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

authority = [[email protected]]host[:port]

Как это:

url syntax

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

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

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

Ответ 6

Власть может также включать имя пользователя и пароль, например.

боб: [email protected]

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