Варианты использования параметра пути URL - PullRequest
16 голосов
/ 20 июля 2011

Обычно, когда я думаю о параметрах в URL, я думаю о строке запроса.Технически, однако, также допустимо указывать параметры в сегментах пути.Таким образом, учитывая URL-адрес, подобный следующему:

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

Допустимо вместо этого написать:

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

На практике я никогда не вижуэтот.Какие фреймворки, если таковые имеются, используют это?

Я работаю с ASP.NET MVC3 в последнее время, и я не уверен, что он может извлекать такие параметры.

Ответы [ 2 ]

2 голосов
/ 17 октября 2013

Многие современные фреймворки будут поддерживать указание переменных как части сегмента пути в своих системах парсинга URL.

Symfony (PHP) и Django (Python) будут поддерживать это, поскольку они поддерживают извлечение значений из URL-адресов.с помощью регулярных выражений.

Одно существенное отличие состоит в том, что параметры, указанные в строке запроса, обычно могут быть в любом порядке, поскольку они, как правило, анализируются в словоподобной структуре.Это не относится к параметрам в сегменте пути.Вы, конечно, могли бы самостоятельно разобрать их в словарь, но только что упомянутые фреймворки не помогут вам в этом.

Обратите внимание, что технически порядок параметров в любом случае является значительным в URI HTTP, то есть в соответствиисравнение двух URL-адресов, в которых параметры (в пути или в строке запроса) находятся в другом порядке, должно предполагать, что они могут ссылаться на другой ресурс.

1 голос
/ 18 января 2013

Контейнеры сервлетов Java используют перезапись URL-адресов для поддержания состояния сеанса, когда клиент не поддерживает файлы cookie путем добавления параметра пути.В спецификации сервлета сказано, что параметр пути должен называться jsessionid

например, http://example.com/servlet_path;jessionid=E60FF3ABD2926AD9AA45513A385E373D

. Чтобы это работало, вы должны быть осторожны, всегда передавая URL-адреса, отправленные клиенту через response.encodeURL().или response.encodeRedirectURL(), чтобы контейнер мог добавить необходимый параметр пути.

Дальнейшая поддержка требуется в спецификации для сопоставления запросов к сервлетам

Путь, используемый для сопоставления с сервлетомURL запроса от объекта запроса минус контекстный путь и параметры пути

...