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