6

我正在阅读关于 URL 的RFC2396 ,上面写着

许多 URI 包括由某些特殊字符组成或由某些特殊字符分隔的组件。这些字符被称为“保留”,因为它们在 URI 组件中的使用仅限于它们的保留用途。

但是关于 url 查询部分(在 ? 和 # 之间)的部分说

3.4. 查询组件 查询组件是由资源解释的信息字符串。

query         = *uric

在查询组件中,保留字符“;”、“/”、“?”、“:”、“@”、“&”、“=”、“+”、“”和“$”。

每个字符的“保留目的是什么?我了解查询中使用的 &、= 和 + 的用途,但是其他字符呢?

更实际的是,当它们在查询中时,我是否应该始终对这些字符进行 url 编码?我见过的浏览器和服务器处理 : 和 ; 和其他未经编码的字符

4

1 回答 1

6

我认为已废弃RFC 2396的RFC 3986的第 2.2 节有一个可能的解释。我引用:

这些字符被称为“保留”,因为它们可能(或可能不)被通用语法、每个特定于方案的语法或 URI 的解引用算法的特定于实现的语法定义为分隔符。

我认为这是 Berners-Lee 等人的观点。试图在这里说明的是,即使并非所有保留字符都用于 RFC 中描述的通用语法,作者希望为未来的方案或实现特定代码留出足够的空间,以便能够在他们认为合适的时候使用这些字符.

至于你是否应该对这些字符进行编码,我的意见是你应该研究并使用遵循标准的百分比编码算法,而不是使用非标准的算法或尝试自己滚动。例如,如果您使用的是 C# 或 Python 之类的语言,那么这些语言附带的库包括符合标准的算法实现。有关更多详细信息,RFC 3986的第 2.4 节介绍了何时编码或解码。

于 2013-01-23T09:33:11.407 回答