допустима строка запроса с / в? - PullRequest
9 голосов
/ 03 февраля 2010

Из-за неправильного общения с партнерским партнером мы работаем с URL-адресом, который они вызывают на нашем сервере.

Это URL, который они должны вызывать на нашем сервере:

 /AAAAAAAA/?b=CCCCCCC

к сожалению, это было реализовано в их системе, как это

 ?b=CCCCCCC/AAAAAAA

Я могу легко разобрать компоненты, но меня беспокоит, что параметр строки запроса с / в нем на самом деле не является действительным URL.

Является ли / в URL действительно допустимым - или я должен быть обеспокоен. При каких обстоятельствах незакодированный / может вызвать проблемы в строке запроса.

Ответы [ 3 ]

8 голосов
/ 17 апреля 2011

Согласно RFC 3986: унифицированный идентификатор ресурса (URI): общий синтаксис (с 2005 года), да, / разрешено в компоненте запроса. Это BNF для строки запроса: (в Приложении A в RFC 3986 )

query         = *( pchar / "/" / "?" )
pchar         = unreserved / pct-encoded / sub-delims / ":" / "@"

В спецификации сказано:

  • Символ косой черты ("/") и вопросительный знак ("?") Могут представлять данные в компоненте запроса .
  • , поскольку компоненты запроса часто используются для переноса идентифицирующей информации в виде пар "ключ = значение", а одно часто используемое значение является ссылкой на другой URI, иногда лучше для удобства использования избегать процентов -кодирование эти символы

Вот связанный вопрос: Строка запроса: может ли строка запроса содержать URL-адрес, который также содержит строки запроса?

2 голосов
/ 03 февраля 2010

Хотя у меня никогда не было проблем, они технически не разрешены согласно RFC 2396 :

В компоненте запроса символы ";", "/", "?", ":", "@", "&", "=", "+", "," И "$" зарезервированы.

Но, как я уже сказал ... Я никогда не сталкивался с какими-либо проблемами. Я думаю, что это проблема со старыми браузерами больше всего, но, может быть, кто-то может пролить свет на проблему, которая вызывает это?

1 голос
/ 03 февраля 2010

Косая черта - это «зарезервированный символ» в части запроса URL для RFC 2396 раздела 3.4, поэтому в соответствии с разделом 2.2 его необходимо кодировать. То есть часть запроса может содержать %2F, но не должна содержать /.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...