在许多网站(特别是gmail,yahoo或hotmail)中,您会注意到网址
之类的是:yahoo.com/abc/bcd.html; _x = 12323; _y = 2322;
这些_x和_y参数是什么?如何在服务器端代码中访问它们?
答案 0 :(得分:4)
它们是URL中的参数(与查询字符串不同),this article有一个很好的讨论,包括这个有用的图表:
<scheme>://<username>:<password>@<host>:<port>/<path>;<parameters>?<query>#<fragment>
请注意,它们不是Java EE ServletRequest#getParameter
中使用的意义上的“参数”(当他们说“参数”时它们意味着查询字符串或POST参数,它们是不同的)。
路径可以由一系列由a分隔的路径段组成 单斜杠“/”字符。在路径段内,字符 “/”,“;”,“=”和“?”保留。每个路径段可以包括a 参数序列,由分号“;”表示字符。 这些参数对于解析相对而言并不重要 引用。
(为避免疑义:上面的“路径”一词不包括查询字符串,请参阅beginning of §3。)
RFC 2396已被RFC 3986淘汰,amends the above显着:
除了分层路径中的点段之外,路径段也是如此 通用语法认为不透明。 URI生成应用程序 经常使用段中允许的保留字符来分隔 特定于方案或特定于引用程序处理程序的子组件。对于 例如,分号(“;”)和等于(“=”)保留字符是 通常用于分隔适用的参数和参数值 那个部分。逗号(“,”)保留字符通常用于 类似的目的。例如,一个URI生成器可能使用一个段 例如“name; v = 1.1”表示对1.1版本的引用 “name”,而另一个可能使用诸如“name,1.1”之类的段 表示相同。参数类型可以由特定于方案定义 语义,但在大多数情况下,参数的语法是特定的 URI的解除引用算法的实现。
答案 1 :(得分:2)
他们只是可能出现在网址中的字符。您可以通过解析URL来访问它们,因为它们不是常规的查询字符串参数。
答案 2 :(得分:1)
这些是URI的路径部分中的段的参数。
答案 3 :(得分:1)
URI语法在RFC 3986中定义如下:
URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ] hier-part = "//" authority path-abempty / path-absolute / path-rootless / path-empty
[...]
The following are two example URIs and their component parts: foo://example.com:8042/over/there?name=ferret#nose \_/ \______________/\_________/ \_________/ \__/ | | | | | scheme authority path query fragment | _____________________|__ / \ / \ urn:example:animal:ferret:nose
在此示例(http://yahoo.com/abc/bcd.html;_x=12323;_y=2322;
)中,这些参数是path component的一部分。从本质上讲,这只是该应用程序中使用的一种约定,它能够识别资源。
一般来说,虽然HTTP URI中的路径通常与您在文件系统中找到的路径类似,但它们不必以任何方式与文件系统结构相关。这纯粹是来自引擎的实现决策,它取消引用URI(即HTTP服务器实现以及将请求分派给将产生响应的任何内容)。
严格来说,查询也是URI的一个组成部分(你会发现很多关于“RESTful”URI的讨论都是没有意义的,除了一些SEO技术)。
因为在使用HTML表单时通过查询段传递参数,所以许多HTTP框架通过将查询拆分为映射来公开其内容。例如,在Java / Servlet内容中,查询字符串(getQueryString()
)会自动填充getParameter(...
)返回的参数。
如果您想从bcd.html;_x=12323;_y=2322;
获取参数,则必须自行拆分路径。