【问题标题】:Can HTTP URIs have non-ASCII characters?HTTP URI 可以有非 ASCII 字符吗?
【发布时间】:2011-01-31 01:34:44
【问题描述】:

我试图在相关的 RFC IETF RFC 3986 中找到它,但找不到。

HTTP 的 URI 是否允许 Unicode 或任何类型的非 ASCII?

您能否引用支持您的答案的部分和 RFC。

NB:对于那些可能认为这与编程无关的人来说——确实如此。它与我正在构建的 ISAPI 过滤器有关。


附录

我已阅读 RFC 3986 的第 2.5 节。但我认为是当前 HTTP 协议的 RFC 2616 早于 3986,因此我认为它不符合 3986。此外,即使或何时HTTP RFC 已更新,仍然存在合理化问题 - 换句话说,HTTP URI 是否支持所有 RFC3986 附带条件,包括适合包含非 US-ASCII 字符的任何内容?

【问题讨论】:

    标签: http unicode isapi rfc3986


    【解决方案1】:

    RFC 3986 正在被 RFC 3987 取代,后者完全支持 Unicode,并提供与 RFC 3986 样式 URI 之间的映射规则。

    【讨论】:

    • RFC 3987 (IRI) 不是 RFC 3986 (URI) 的替代品。最好把它想象成分层的东西。
    • 不是分层的,而是定义在它的一边。 IRI 反映了 URI 的结构,但不是基于它。 IRI 是一个独立的方案,第 3 节现在定义在需要时在两个方案之间移动。我说它是一个替代品,因为以前依赖 URI 的许多系统已经更新为依赖 IRI。
    【解决方案2】:

    不,他们是不允许的。只需检查 RFC 3986 中的 ABNF。

    【讨论】:

    • 以及您对另一个答案的评论:URI 不包含非 ASCII 字符。根据定义。曾经。 IRI (RFC 3987) 可以。您可以将 IRI 映射到 URI。 HTTP 仅在网络上使用 URI。
    【解决方案3】:

    许多浏览器不支持带有 Unicode 字符的 URI(我已经在我建立的名为 blogvani.com 的网站上实现了它们)并且 Google 会适当地扫描并保持它们完好无损。不过,我认为这不适用于顶级域,至少不适用于注册商,也不能直接使用。

    对于顶级域,如果您有一个以 Unicode 注册的域(例如人们可以用印地语注册域),它将被转换为相应的 ASCII 代码(可能类似于 jdhfks3243-32434.com)。 ..

    看到它是如何路由的,并意识到你实际上并没有进入一个 unicode 域,尽管看起来是这样,这很有趣。

    【讨论】:

      【解决方案4】:

      这是一个例子:☃.net。

      就 RFC 3986 的相关部分而言,我认为您正在查看 2.5

      编辑:

      显然堆栈溢出不会将其检测为正确的 URL。您必须复制并粘贴到浏览器中。

      【讨论】:

      • 我不清楚你的回答。是否支持带有非 US-ASCII 字符的 HTTP URI?提供一个例子不是“支持”。另外,我对 RFC3986 很清楚。我的意思是我阅读了第 2.5 节。但是我认为是当前 HTTP 协议的 RFC 2616 早于 3986,因此我认为它不能与 3986 兼容。此外,即使/当更新 HTTP RFC 时,仍然会有合理化 - 换句话说,HTTP URI 是否支持 ALL 的 RFC3986 附带条件,包括适合包含非 US-ASCII 字符的任何内容?
      • 所以对我来说,您在此处的回复提供了信息,但不是实际的答案。另外 - 作为旁注,我无法让该 URL 工作,在任何浏览器,无论我做什么。
      • HTTP RFC 正在更新,它将参考 RFC 3986,请参阅 IETF HTTPbis WG 的主页。
      • 谁支持?我可以去那个网站,所以我的浏览器和他们的 http 服务器至少支持非 ASCII 字符。
      【解决方案5】:
      【解决方案6】:

      以前在 DNS 和 URL/URI 中不允许使用非英文字符。有一个黑客可以通过在 URI 中使用 % 编码来允许它们。然而,美国和中国等许多国家开始使用非拉丁字符实施 DNS。这是对其中之一的引用standards

      【讨论】:

      • “非英语”→“非 ASCII”。有许多英文字符在域名中也是无效的。
      • 所以我从中得出的结论是……标准是#1,仍在不断发展,#2,仍在被采用。换句话说,在 HTTP URI 中对非 US-ASCII 字符的支持还不稳固。准确吗?
      • 不,这不准确。 URI 不包含非 ASCII 字符。根据定义。曾经。 IRI (RFC 3987) 可以。您可以将 IRI 映射到 URI。 HTTP 仅在网络上使用 URI。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-01-01
      • 2020-09-01
      • 2013-06-23
      • 1970-01-01
      • 2015-01-12
      • 2016-02-27
      • 1970-01-01
      相关资源
      最近更新 更多