为什么字符像@,$,:和; url查询组件中的保留字符?

时间:2012-03-08 09:32:43

标签: url specifications rfc2396

我正在阅读有关

的网址的RFC2396
  

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

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

  

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

query         = *uric
     

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

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

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

1 个答案:

答案 0 :(得分:5)

我认为RFC 3986的第2.2节废除了RFC 2396,它有一个 可能的解释。我引用:

  

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

我认为伯纳斯 - 李等人。试图到达这里是即使 并非所有保留字符都用于描述的通用语法中 RFC,作者希望为将来的方案留下足够的自由度 实现特定的代码,以便能够使用他们看到的那些字符 配合。

至于你是否应该对这些角色进行编码,我认为你应该这样做 研究并使用符合标准的Percent-Encoding Algorithm 而不是使用非标准的或尝试自己滚动。例如,如果你 正在使用像C#或Python这样的语言,然后是那些附带的库 语言包括符合标准的算法实现。更多 详情,RFC 3986的第2.4节涵盖了编码或解码的时间。