Возможно ли использовать неуникальные ключи в HTTP Query String?

Здравствуйте!

Я провел исследование в RFC документации и не смог найти однозначного ответа на мой вопрос. Мне интересно узнать, соответствует ли следующий get-запрос стандарту: site.ru/?foo=bar&foo=bar2?

Когда я использую этот запрос в PHP (возможно, на уровне Apache), он распознает только один ключ (первый).

Однако, в одной из документаций по REST API, утверждается, что такой случай является более реальным.
  • 25 сентября 2023 г. 10:38
Ответы на вопрос 3
Да, возможно использовать неуникальные ключи в HTTP Query String. По стандарту HTTP, каждый параметр в Query String должен иметь уникальный ключ. Однако, некоторые реализации серверов могут позволять повторяющиеся ключи.

В вашем случае, запрос site.ru/?foo=bar&foo=bar2 допустимый с точки зрения синтаксиса URL, но на самом деле поведение сервера может отличаться. В PHP, по умолчанию, при обработке Query String только первое значение будет сохранено, а остальные будут проигнорированы. 

Тем не менее, некоторые серверы и языки программирования предоставляют специальные методы для работы с повторяющимися ключами в Query String. В PHP, например, можно использовать функцию parse_str с флагом PHP_QUERY_RFC3986, чтобы разобрать Query String и сохранить все значения для повторяющихся ключей.

Таким образом, хотя использование неуникальных ключей в HTTP Query String не является стандартным, некоторые реализации могут поддерживать это поведение. Рекомендуется проверить документацию вашего сервера или языка программирования для уточнения поддерживаемых возможностей.
PHP обрабатывает параметры запроса и принимает последнее значение, если параметр повторяется. Для передачи массива параметров используйте формат site.ru/?foo[]=bar&foo[]=bar2. В этом случае в PHP вы получите массив $_GET['foo'] с элементами ['bar', 'bar2'].
Важно понимать, что PHP не требует уникальности параметров. Это означает, что вы можете передавать неуникальные значения в параметрах запроса, например, ?foo[]=bar&foo[]=bar2. В такой ситуации PHP просто примет последнее значение и проигнорирует предыдущие. Это поведение может показаться очевидным, но банальным. Например, если вы определите и переопределите значение массива в коде, только последнее определение останется в массиве, и первое будет замещено. Обратите внимание, что такое поведение не зависит от PHP Oppah и является частью языка. Тем не менее, если вам необходимо получать неуникальные значения из строки запроса, вы можете написать свой разборщик строки запроса и извлекать значения по-другому.
Похожие вопросы