2015-05-15 2 views
9

В один момент в истории, сторона сервера языков начала настройки urlencoded параметров, чтобы добавить поддержку для представления данных в виде массивов и ключевыми объекты/значения:Есть ли спецификация для вложенных параметров urlencoded []?

// key/value pairs 
contact[name]=John 
contact[phone]=800-555-1234 

// arrays 
foo[]=bar 
foo[]=baz 

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

+1

Я не нашел спецификацию или даже имя для этого формата, но FWIW PHP и Rails чаще всего упоминаются как его начало. Мой собственный вопрос по этому вопросу был http: // stackoverflow.com/questions/28904957/is-there-a-spec-for-jquery-params-non-traditional-mode –

ответ

3

квадратные скобки в URIs

Согласно RFC-3986 "Uniform Resource Identifier (URI): Generic Syntax", используя незакодированные квадратные скобки в URI, не допускается. Поэтому это не стандарт HTTP.

Хост, идентифицированный литеральным адресом интернет-протокола, версия 6 [RFC3513] или более поздняя, ​​отличается включением литерала IP в квадратных скобках («[» и «]»). Это единственное место, где символы квадратной скобки допускаются в синтаксисе URI.

Многие языки программирования используют квадратные скобки для массивов, поэтому я предполагаю, что это было естественным переносом для использования квадратных скобок в URI.

Есть ли спецификация, которая формализует, как сервер должен обрабатывать эту кодировку?

Нет, по крайней мере, не зависит от языка.

Первая реализация

Много рамок веб-приложений позволяют повторное использование одного и того же ключа в запросе, чтобы создать массив, например http://example.org/?foobar=hello&foobar=world. Эти рамки также позволяют использовать квадратные скобки в ключах, но это не имеет значения, они просто являются частью имени. Ассоциативные массивы редко поддерживаются. (Предостережение: я не знаком со всеми этими языками.)

  • Perl, 1987: Нумерованные массивы поддерживаются, но не являются ассоциативными массивами.
  • PHP, 1995: Поддерживает нумерованные массивы, а также ассоциативные массивы.
  • Активные серверные страницы (ASP), 1996: Нумерованные массивы поддерживаются, но не являются ассоциативными массивами.
  • JavaServerPages (JSP), 1999: Нумерованные массивы поддерживаются, но не являются ассоциативными массивами.
  • JAX-RS (Java), 2008: Нумерованные массивы поддерживаются, но не являются ассоциативными массивами.

Пока что PHP является единственным языком, который я нашел, который поддерживает ассоциативные массивы в URL-адресах без специального кода.

+0

Я знаю, что языки программирования уже давно используют их в своем синтаксисе, но меня интересует их использование в запросе URI строки. Мне нужна реализация spec/reference, я могу проанализировать поведение. –

+0

@BradKoch: Извините, я написал только половину своих мыслей. Я не думаю, что мы можем предоставить вам независимые от языка ответы. С каким сервером вы работаете? –

+0

Я делаю несколько тестов против библиотеки Clojure. Однако это не имеет значения, я пытаюсь найти исходную ссылочную реализацию, чтобы я мог видеть, как она себя ведет. –

0

http_build_query был в PHP очень долгое время. Наверное, это. https://php.net/http_build_query

+0

Это версия кодировки, есть ли декодирование? –

Смежные вопросы