Разделитель параметров в URL-адресах, случай неправильной метки вопроса

То, что я действительно не понимаю, - это преимущество использования '?' вместо '&' в URL-адресах:

Это облегчает жизнь жизни, если мы используем другой символ как первый символ разделителя. Можете ли вы придумать разумное объяснение?

EDIT: после дополнительных исследований я обнаружил, что "&" может быть частью имени файла (terms & condition.html), поэтому "?" является хорошим разделителем. Но все же я думаю, используя "?" для разделителей облегчает жизнь (с точки зрения генераторов URL-адресов и парсеров):

Есть ли какое-либо преимущество в использовании "&" что непонятно с первого взгляда?

3 ответа

С точки зрения URI spec (RFC 3986) единственным разделителем здесь является "?". формат запроса непрозрачен; амперсанды просто являются тем, что HTML используется для представления форм.


Ответ в значительной степени в этой статье - http://www.skorks.com/2010/05/what-every-developer-should-know-about-urls/. Чтобы выделить это, выполните следующие действия:

Запрос является предпочтительным способом отправки некоторых параметров ресурсу на сервер. Это пары ключ = значение и отделены от остальных URL-адреса? (знак вопроса) и обычно разделены друг от друга символами (амперсанд). Что вы можете не знать тот факт, что законно отделять их друг от друга; (полуколонии). Следующие URL-адреса эквивалентны:

http://www.blah.com/some/crazy/path.html?param1=foo¶m2=bar

http://www.blah.com/some/crazy/path.html?param1=foo;param2


RFC 3896 (https://www.ietf.org/rfc/rfc3986.txt) определяет общие и вспомогательные разделители... '?' является общим, '&' а также ';' под. Спецификация довольно понятна.

В этом случае последний '?' символы будут рассматриваться как часть запроса. Если синтаксический анализатор запросов строго следует за спецификацией, он будет передавать весь запрос в приложение-адресат. Если приложение-адресат может выбрать дальнейшую обработку строки запроса способом, который обрабатывает? в качестве разделителя пар параменованных значений пара, что зависит от дизайнеров приложений.

Я предполагаю, что это часто "просто работает", потому что код, который разделяет строки запросов, и исходный uri использует все разделители для соответствия: 1) первый запрос разбивается на '?' затем 2) строка запроса анализируется с использованием списка соответствия char, который включает '?' (только для удобства).... Это может происходить уже в вездесущих библиотеках разбора.

licensed under cc by-sa 3.0 with attribution.