HTTP URI可以包含非ASCII字符吗?

21

我试图在相关的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规定,包括适当包括非美国ASCII字符?

6个回答


5
不可以。请查看RFC 3986中的ABNF规范。

1
URIs不包含非ASCII字符。根据定义,永远不会有。IRIs(RFC 3987)可以包含非ASCII字符。您可以将IRIs映射到URIs。HTTP仅在传输中使用URIs。 - Cheeso

4

这是一个例子:☃.net。

根据RFC 3986的相关部分,我认为你正在查看2.5

编辑:

显然,堆栈溢出将其识别为不正确的URL。您需要将其复制并粘贴到浏览器中。


1
我不太明白你的回答。HTTP URI是否支持非US-ASCII字符?提供一个例子并不等于“支持”。另外,我对RFC3986很清楚,我指的是我读了第2.5节。但是RFC2616是当前的HTTP协议,早于3986,因此我认为它不能符合3986。此外,即使HTTP RFC得到更新,仍然存在合理化的问题 - 换句话说,HTTP URI是否支持所有 RFC3986条款,包括适当包含非US-ASCII字符的内容? - Cheeso
对我来说,你在这里的回复提供了信息,但并没有实际的答案。另外 - 只是作为一个旁注,无论我做什么,我都无法在任何浏览器中让那个URL起作用。 - Cheeso
HTTP RFC正在更新,它将引用RFC 3986,请参见IETF HTTPbis WG的主页。 - Julian Reschke
由谁支持?我可以访问那个网站,所以非 ASCII 字符至少被我的浏览器和他们的 HTTP 服务器支持。 - TZubiri

0

过去,DNS 和 URL/URI 不允许使用非英语字符。通过在 URI 中使用 % 编码来实现这一点。然而,许多国家,如俄罗斯和中国,开始使用非拉丁字符来实现 DNS。这里有一个参考 标准


“non english” → “非ASCII”。有许多英语字符在域名中也无效。 - bignose
我的理解是,标准仍在不断发展,并且仍在被采用。换句话说,在HTTP URI中支持非美国ASCII字符还不够稳定。这样描述准确吗? - Cheeso
2
不,那不准确。URI 不包含非 ASCII 字符,这是定义。永远如此。IRI(RFC 3987)包含非 ASCII 字符。您可以将 IRI 映射到 URI。HTTP 只在传输时使用 URI。 - Julian Reschke

0

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


1
RFC 3987(IRI)并不是 RFC 3986(URI)的替代品。最好将其视为在其之上分层的东西。 - Julian Reschke
1
不是在其上层,而是在其侧面定义。IRI镜像URI的结构,但并非基于它。IRI是一个独立的方案,第3节定义了何时需要在两个方案之间切换。我说它是一种替代,因为许多以前依赖URI的系统已经更新为依赖IRI。 - Remy Lebeau

-1

许多浏览器不支持带有Unicode字符的URI(我已经在一个名为--blogvani.com的网站上实现了它们),而Google会认真扫描并保持它们完整。但我认为这在顶级域名上不起作用,至少不是通过注册机构和直接方式。

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

看到这个路由方式并意识到你实际上并没有进入一个Unicode域名,这是非常有趣的。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接