Uri.Host和Uri.Authority有什么区别

时间:2010-01-26 21:50:23

标签: c# .net uri

System.UriHostAuthorityDnsSafeHost。 MS提供了HostDnsSafeHost不同here时的一个很好的示例。

我想了解HostAuthority的类似示例/说明。

6 个答案:

答案 0 :(得分:78)

是的,布兰登是绝对正确的,用外行的话来说

授权=主机名+端口号

如果URL协议使用默认端口,例如http URL的端口80,那么仅在这种情况下 Authority =主机名(端口号假定为80),

主机名是域名或I.P地址

示例:

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

    授权= www.example.com
    主机名= www.example.com

  2. http://255.255.255.255:8080/

    权限= 255.255.255.255:8080
    主机名= 255.255.255.255

答案 1 :(得分:33)

来自MSDN URI.Host页。

  

与Authority属性不同,此属性值不包括端口号。

答案 2 :(得分:10)

根据您链接的文档,Authority属性将包含端口号(如果它与Uri的默认端口不同),而Host属性将仅返回DNS主机名或IP地址。

我不相信会有更多的差异。

答案 3 :(得分:9)

对于.NET中的Uri类,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));

根据RFC3986Section 3.2权威机构包含

  1. 用户信息
  2. 主机
  3. 端口号。
  4. 不仅仅是主机和端口号。

    例如,以下是有效的URI:

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

    中的权力机构

    user:password@host:80
    

    at符号(@)用于界定主机的用户信息,冒号(:)用端口号分隔主机。在用户信息中,冒号(:)用于从密码中分隔用户名。 (是的,我知道密码部分已弃用。可能仍然可以选择支持。)

    这是管理局的完整规范。显然,用户信息和端口号通常不存在。

    .NET中的 Uri类在返回权限时丢弃了用户信息,这很烦人,因为它不正确。相反,您可以在UserInfo属性中找到用户信息:

    Uri.UserInfo
    

    其他答案从技术上来说,对于.NET Uri类的 ,Uri.Authority和Uri.Host之间的区别在于主机不包含端口号。

    但请注意权限未按照在.NET Uri类中使用的方式正确定义,因为它也可能包含用户信息。

答案 4 :(得分:4)

每个HTTP URL都符合通用URI的语法。 URI通用语法由五个组成部分的层次结构序列组成:

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

权威组件分为三个子组件:

authority = [userinfo@]host[:port]

赞:

url syntax

可选的 authority 组件,其前有两个斜杠(//),其中包括:

  • 可选的 userinfo 子组件,可以由用户名和可选的密码组成,后跟冒号(:),后跟一个at符号(@)。出于安全原因,不建议在userinfo子组件中使用username:password格式。应用程序不应在userinfo子组件中第一个冒号(:)之后的任何数据均以明文形式呈现,除非冒号之后的数据为空字符串(表示无密码)。
  • 可选的 host 子组件,由注册名称(包括但不限于主机名)或IP地址组成。 IPv4地址必须采用点分十进制格式,并且IPv6地址必须括在方括号([])中。
  • 可选的 port 子组件,其后带有冒号(:)。

有关更多详细信息,请参阅https://en.wikipedia.org/wiki/URL

答案 5 :(得分:0)

权限还可以包含用户名和密码,例如

鲍勃:pwd@somewhere.example.com

更常用于FTP URI