【问题标题】:Why are characters like @, $, :, and ; reserved characters in a url query component?为什么像@、$、:和;这样的字符url查询组件中的保留字符?
【发布时间】:2012-03-25 19:14:42
【问题描述】:

我在 URL 上阅读 RFC2396,上面写着

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

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

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

query         = *uric

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

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

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

【问题讨论】:

    标签: url specifications rfc2396


    【解决方案1】:

    我认为 RFC 3986 的第 2.2 节(已过时 RFC 2396)有一个 可能的解释。我引用:

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

    我认为这是 Berners-Lee 等人的观点。试图到达这里的是,即使 并非所有保留字符都用于 RFC,作者希望为未来的方案或 实现特定的代码能够使用他们看到的那些字符 适合。

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

    【讨论】:

    • 不错的答案。我敢肯定,您回答几个月前的问题会获得徽章,恭喜! :P
    • 有一个徽章,叫做“复兴”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 2017-02-08
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 2012-10-10
    相关资源
    最近更新 更多