【问题标题】:How to form URI to access network machine with hostname containing extended characters如何使用包含扩展字符的主机名形成 URI 以访问网络机器
【发布时间】:2015-03-28 00:50:36
【问题描述】:

我在本地网络上有一些 Windows 7 机器,每台机器都有一个主机名。其中一个是运行 Java 8 应用程序,该应用程序必须通过 HTTP 访问另一台机器,因此它需要形成一个包含服务器机器主机名的 URI。运行 HTTP 服务器的机器的主机名包含日文字符,这些字符在 URI 中是不允许的。

如何构造 URI 来访问本地网络上的服务器? RFC 4501,“域名系统统一资源标识符”,表示根据 RFC 3986,“统一资源标识符 (URI):通用语法”进行编码,我将其推断为 UTF-8 八位字节的百分比编码。但是 RFC 3490,“应用程序中的国际化域名 (IDNA)”,表示要转换为 Punycode。

那么它是百分比编码还是 Punycode?哪种编码允许 Java 应用程序成功查找并连接到本地网络上的另一台 Windows 7 机器,主机名中包含扩展字符?

【问题讨论】:

    标签: unicode hostname domain-name percent-encoding punycode


    【解决方案1】:

    DNS 仅支持主机名中的 ASCII,因此包含国际字符的主机名必须在 DNS 中注册,并在 URL 中编码,使用 Internationalized Domain Name (IDN) 格式,在编码非 ASCII 时使用 NameprepPunycode字符。

    还可以查看RFC 3987 Internationalized Resource Identifiers (IRIs),它允许国际字符(大部分)未编码,并定义了在 IRI 和 URI 之间转换的算法。

    【讨论】:

    • 感谢您的回复,Remy Lebeau,但您没有提供答案——您只是提供了一个链接,并告诉我必须对主机名进行编码而没有告诉我 如何 i> 它们必须被编码。
    • 我告诉过你它们是如何在 URL 中编码的 - 使用 IDN 格式来匹配它们的 DNS 注册。
    【解决方案2】:

    正确答案是“在形成 URI 时使用 Punycode 对主机名进行编码”。这在 W3C 文章 An Introduction to Multilingual Web Addresses 中进行了解释,并在 RFC 3987“国际化资源标识符 (IRI)”中指定。

    【讨论】:

    猜你喜欢
    • 2020-07-17
    • 2016-07-06
    • 2021-11-04
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    • 2012-03-17
    • 2015-10-07
    相关资源
    最近更新 更多