主机与 DnsSafeHost
Posted
技术标签:
【中文标题】主机与 DnsSafeHost【英文标题】:Host vs DnsSafeHost 【发布时间】:2010-11-16 12:16:42 【问题描述】:我需要让主机脱离 Request 对象。我应该使用哪个属性以及为什么?
来自 MSDN:
Uri.DnsSafeHost 属性
包含未转义的字符串 URI 中合适的宿主部分 用于 DNS 解析;或原件 未转义的主机字符串,如果是 已经适合解析了。
对
Uri.Host 属性
包含主机名的字符串。 这通常是 DNS 主机名或 服务器的 IP 地址。
我的测试是使用 ASP.NET 开发服务器进行的。这两个总是返回localhost
。即使我输入 127.0.0.1,两者都返回 localhost
。
继续阅读,DnsSafeHost
属性将处理 IPv6 地址,以及 Unicode 到 ASCII 的转换(如果需要)。它还可以考虑 IRI 和 IDN。即使我目前不关心这些事情,我是否应该只使用DnsSafeHost
属性以确保安全?
【问题讨论】:
IdnHost
现在作为使用 DnsSafeHost
的首选替代方法提供:docs.microsoft.com/en-us/dotnet/api/system.uri.idnhost
【参考方案1】:
如果您打算自行将生成的主机名发送到 DNS 服务器,请将 DnsSafeHost 应用于 URL。 DNS 最初是一个纯 ASCII 协议 (and a subset of ASCII at that)。当前的 URL 允许 URL 的主机部分中的字符序列不能直接发送到 DNS 服务器。例如:
bracket-enclosed IPv6 addresses。 DnsSafeHost 去掉了括号。
非ASCII、非英文域名。 DnsSafeHost(可选)使用RFC 3987 IRI对字符进行规范化,并将非ASCII字符转换为IDN、Punycode编码。
谁知道将来会允许哪些 URL?该应用程序的寿命可能比我们对 URL 中什么是好的假设的寿命更长。 DnsSafeHost 在那里增加了一定程度的弹性。
如果您需要向用户显示主机名,请改用 Host 属性。
【讨论】:
这是有道理的。我没有考虑如何使用 Host 显示名称,以及如何以编程方式使用 DnsSafeHost。感谢您简洁明了的回答!以上是关于主机与 DnsSafeHost的主要内容,如果未能解决你的问题,请参考以下文章