2011-07-20 58 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進行符合比較時,必須假設他們可以引用不同的資源。