7

根据第 3.3 节,RFC2396 的路径组件- 统一资源标识符

路径可能由一系列路径段组成,由单个斜杠“/”字符分隔。在路径段中,字符“/”、“;”、“=”和“?” 被保留。每个路径段可以包括一系列参数,用分号“;”表示 特点。这些参数对于解析相对引用并不重要。

但是,我从未在除最后一个段之外的任何段中看到带有查询参数的 URL。所以,我不确定我是否正确阅读了这篇文章。

http://www.url.com/segment1?seg1param1=val1/page.html?pageparam1=val2有效的网址吗?

4

4 回答 4

13

RFC 所指的是这样的:

http://www.example.com/foo/bar;param=value/baz.html

这可以解释为/foo/bar/baz.html带有参数param=valuebar段的路径。不使用问号。

请注意,RFC 2396 已被RFC 3986淘汰,它省略了特定于段的参数的规范,有利于一般注意,实现可以(并且做)不同的事情来嵌入特定于段的参数:

除了层次路径中的点段之外,路径段被通用语法认为是不透明的。生成 URI 的应用程序通常使用段中允许的保留字符来分隔特定于方案或特定于解引用处理程序的子组件。例如,分号 (";") 和等号 ("=") 保留字符通常用于分隔适用于该段的参数和参数值。逗号 (",") 保留字符通常用于类似目的。例如,一个 URI 生产者可能使用诸如“name;v=1.1”之类的段来指示对“name”的 1.1 版本的引用,而另一个 URI 生产者可能使用诸如“name,1.1”之类的段来指示相同。参数类型可以由特定于方案的语义定义,

于 2011-07-01T13:26:03.223 回答
1

当您查看下面的语法时,它是这样写的:

  path          = [ abs_path | opaque_part ]

  path_segments = segment *( "/" segment )
  segment       = *pchar *( ";" param )
  param         = *pchar

  pchar         = unreserved | escaped |
                  ":" | "@" | "&" | "=" | "+" | "$" | ","

一个段由 pchar 和 param 组成,param 本身就是一个 pchar。当我们继续阅读时,绝对没有“?” pchar 字符组件中的字符。所以参数不能有“?”,也不能有“?” 在段中。

所以我同意 Edward Thomson 的回答,他说“?” 仅分隔查询段,不能在路径内使用。

于 2011-06-30T15:41:30.603 回答
0

根据我对 RFC 2396 的阅读,没有. 这?是一个保留字符,仅用于分隔查询段。在?路径或查询段中都不允许。

在您的示例中,第一个?标记查询段的开始。第二个?在查询段内,是不允许的。

于 2011-06-30T15:13:10.230 回答
0

我相信你可以做到这一点,大多数网络服务器都会处理它,但我不相信你会得到你期望的结果。那就是 pageparam1=val2 不会评估。

如果你想要这样的参数,你总是可以使用 # 符号(就像现在很多基于 javascript 的 GUI 一样)。

于 2011-06-30T15:18:51.697 回答