2011-07-20 64 views
16

通常当我想到URL中的参数时,我想到了查询字符串。但是,从技术上讲,在路径段中指定参数也是合法的。因此,获得一个网址是这样的:URL路径参数使用案例

http://www.a.com/frisbee/brand

是合法的,而不是写:

http://www.a.com/frisbee;color=red;size=small/brand;test=1

在实践中我从来没有看到这一点。什么框架,如果有的话,利用这个?

我正在使用ASP.NET MVC3最近,我不确定它可以提取这些类型的参数。

+0

JAX-RS识别并使用它们。 –

+1

如果你在一个不支持它们的框架上,你总是可以添加一些['mod_rewrite'规则](http://httpd.apache.org/docs/current/mod/mod_rewrite.html)来转换转换成普通的查询字符串。虽然可能会很慢,所以我会避免生产中的mod_rewrite。 – pieman72

回答

1

Java Servlet Containers使用URL重写来维护会话状态,当客户端通过追加路径参数不支持cookie时。小服务程序规范规定路径参数必须命名为jsessionid

例如, http://example.com/servlet_path;jessionid=E60FF3ABD2926AD9AA45513A385E373D

要做到这一点,您必须小心始终通过response.encodeURL()response.encodeRedirectURL()将发送回客户端的URL传递给客户端,以便容器可以添加必要的路径参数。

进一步支持是由规范映射请求要求与Servlet

用于映射到一个servlet的路径是从请求对象 减去上下文路径请求URL和路径参数

2

许多现代框架将支持在其URL分析系统中将变量指定为路径段的一部分。

Symfony(PHP)和Django(Python)都支持这一点,因为它们支持通过正则表达式从URL中提取值。

一个显着的区别是查询字符串中指定的参数通常可以以任何顺序排列,因为它们通常会被解析为类似字典的结构。这不适用于路径段中的参数。你当然可以把它们自己解析成字典,但是我刚刚提到的框架并不能帮助你做到这一点。

请注意,从技术角度而言,参数的顺序在HTTP URI中非常重要,即对参数(在路径中或查询字符串中)参数不同的顺序的两个URL进行符合比较时,必须假设他们可以引用不同的资源。