在RFC 3986 URI:通用语法规格列出分号作为保留(子DELIM)字符:
reserved = gen-delims / sub-delims gen-delims = ":" / "/" / "?" / "#" / "[" / "]" / "@" sub-delims = "!" / "$" / "&" / "'" / "(" / ")" / "*" / "+" / "," / ";" / "="
";"的保留目的是什么?URI中的分号?就此而言,其他子delim的目的是什么(我只知道"&","+"和"="的用途)?
第3.3节末尾有一个解释.
除了分层路径中的点段之外,通用语法将路径段视为不透明.URI生成应用程序通常使用段中允许的保留字符来分隔特定于方案或解除引用处理程序的子组件.例如,分号(";")和等于("=")保留字符通常用于分隔适用于该段的参数和参数值.逗号(",")保留字符通常用于类似目的.例如,一个URI生成器可能使用诸如"name; v = 1.1"之类的段来表示对"name"的版本1.1的引用,而另一个URI生成器可能使用诸如"name,1.1"之类的段来表示相同.参数类型可以由特定于方案的语义定义,但在大多数情况下,参数的语法特定于URI的解除引用算法的实现.
换句话说,它是保留的,只要内容是百分比编码的,;
即使部分包含;
,也希望URL中某些内容的分隔列表的人可以安全地用作分隔符.换句话说,你可以这样做:
foo;bar;baz%3bqux
并把它解释为三个部分:foo
,bar
,baz;qux
.如果分号不保留字符时,;
与%3b
这样的URI将被不正确地解释为四个部分将是等效的:foo
,bar
,baz
,qux
.
如果您回到规范的旧版本,意图会更清晰:
path_segments = segment *( "/" segment ) segment = *pchar *( ";" param )
每个路径段可以包括一系列参数,由分号";"表示.字符.
我相信它起源于FTP URI.
第3.3节涵盖了这个 - 它是一个不透明的分隔符,一个产生URI的应用程序可以使用方便:
除了分层路径中的点段之外,通用语法将路径段视为不透明.URI生成应用程序通常使用段中允许的保留字符来分隔特定于方案或解除引用处理程序的子组件.例如,分号(";")和等于("=")保留字符通常用于分隔适用于该段的参数和参数值.逗号(",")保留字符通常用于类似目的.例如,一个URI生成器可能使用诸如"name; v = 1.1"之类的段来表示对"name"的版本1.1的引用,而另一个URI生成器可能使用诸如"name,1.1"之类的段来表示相同.参数类型可以由特定于方案的语义定义,但在大多数情况下,参数的语法特定于URI的解除引用算法的实现.