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

Cha*_* Ma 5 url specifications rfc2396

我正在阅读有关URL的RFC2396

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

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

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

query         = *uric
Run Code Online (Sandbox Code Playgroud)

在查询组件中,保留字符";","/","?",":","@","&","=","+",","和"$".

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

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

λ J*_*kas 5

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

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

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

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