通常,当我想到URL中的参数时,我会想到查询字符串。但从技术上讲,在路径段中指定参数也是合法的。因此给出这样的URL:
http://www.a.com/frisbee/brand
写这个是合法的:
http://www.a.com/frisbee;color=red;size=small/brand;test=1
在实践中,我从未见过这一点。哪些框架(如果有的话)可以利用这个?
我最近在使用ASP.NET MVC3,我不确定它是否可以提取这些参数。
答案 0 :(得分:2)
许多现代框架都支持在其URL解析系统中将变量指定为路径段的一部分。
Symfony(PHP)和Django(Python)都支持这一点,因为它们支持通过正则表达式从URL中提取值。
一个显着的区别是查询字符串中指定的参数通常可以按任何顺序排列,因为它们通常会被解析为类似字典的结构。这不适用于路径段中的参数。您当然可以将它们自己解析为字典,但我刚才提到的框架对您没有帮助。
请注意,从技术上讲,参数的顺序在HTTP URI中是重要的,即两个URL的一致性比较,其中参数(在路径或查询字符串中)的顺序不同,必须假设它们可以引用不同的资源。
答案 1 :(得分:1)
当客户端不支持cookie时,Java Servlet Containers通过附加路径参数来使用URL重写来维护会话状态。 servlet规范说path参数必须命名为jsessionid
e.g。 http://example.com/servlet_path;jessionid=E60FF3ABD2926AD9AA45513A385E373D
要实现这一点,您必须小心,始终通过response.encodeURL()
或response.encodeRedirectURL()
将您发送的网址传递回客户端,以便容器可以添加必要的路径参数。
将请求映射到servlet的规范要求进一步支持
用于映射到servlet的路径是请求对象的请求URL 减去上下文路径和路径参数