主机与 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的主要内容,如果未能解决你的问题,请参考以下文章

海外主机是什么意思?与国内主机有什么区别?

windows主机与linux主机之间的互ping问题!!!

VMware虚拟机中安装Ubuntu无法与主机共享上网

Apache 虚拟主机与日志分割

怎么让虚拟机的网络独立,与主机网络隔离?

如何实现虚拟机与主机之间的文件共享,复制