gpt4 book ai didi

sockets - 我如何知道何时进行 UTF8 或 punycode DNS 查询?

转载 作者:行者123 更新时间:2023-12-02 10:13:20 25 4
gpt4 key购买 nike

我有一个带有地址栏的应用程序,用户输入我必须连接到的 IRI。

在 unix/Darwin 上,这很简单:我将 IDN 扁平化为 URI,如 RFC3987 中所述。也就是说,如果该方案有一个权限部分,我会使用 punycode 将其映射到 ASCII,然后对 IRI 其余部分中的任何非 ASCII 字符进行百分比编码。

在 Windows 上,有两种可能性:域名是普通的互联网域名,在这种情况下,应使用 punycode 将其映射为 ASCII,并使用普通的 DNS 进行查找。或者,域名是一种奇怪的 Windows 域名(例如 Active Directory DNS 服务器),并且查找实际上应该是 UTF-8。

示例

  • 用户类型 http://☃.net :调用getaddrinfo(service="xn--n3h.net") .
  • 用户类型 http://dryden.internal.corp.com :调用getaddrinfo(service="dryden.internal.corp.com")会工作得很好。
  • 用户类型 http://pöp.internal.corp.com :
    • 调用 getaddrinfo(service="xn--pp-fka.internal.corp.com")如果“pöp”是 UTF-8 DNS 发布的机器名称,则不起作用。
    • 调用 GetAddrInfoW(service=T"pöp.internal.corp.com")有效。

Firefox 和 Chrome 都会立即在任何 IRI 上执行 punycode,因此无法解析奇怪的 Microsoft 域。

指南?

在这种环境中处理 IRI 有哪些准则?有没有推荐的方法来猜测应该进行哪种类型的 DNS 查找,punycode 还是 UTF-8 DNS?其他应用程序有什么作用?

我目前的最佳解决方案尝试是,如果它是公共(public) TLD,则首先执行 punycode,但如果 TLD 是内部的,则跳过尝试 punycode(acme.com 可能提供公共(public)服务,acme.ltd 可能是一个内部网)。如果 punycode 失败或被跳过,我会尝试 UTF-8 查询。

最佳答案

有一种解决方法会对响应时间产生负面影响 - 如果没有其他帮助,您可以尝试使用这两种方法进行 2 次调用,并从第一个方法中获取响应才能成功。

关于sockets - 我如何知道何时进行 UTF8 或 punycode DNS 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16837513/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com