System.Uri
有Host
,Authority
和DnsSafeHost
。 MS提供了Host
和DnsSafeHost
不同here时的一个很好的示例。
我想了解Host
和Authority
的类似示例/说明。
答案 0 :(得分:78)
是的,布兰登是绝对正确的,用外行的话来说
授权=主机名+端口号
如果URL协议使用默认端口,例如http URL的端口80,那么仅在这种情况下 Authority =主机名(端口号假定为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
答案 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));
根据RFC3986,Section 3.2权威机构包含
不仅仅是主机和端口号。
例如,以下是有效的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]
赞:
可选的 authority 组件,其前有两个斜杠(//),其中包括:
有关更多详细信息,请参阅https://en.wikipedia.org/wiki/URL。
答案 5 :(得分:0)
权限还可以包含用户名和密码,例如
鲍勃:pwd@somewhere.example.com
更常用于FTP URI