Использование повторяющихся параметров в URL

мы создаем собственный API и часто передаем параметр с несколькими значениями.

Они используют: mysite.com?id=1 & id=2 & id=3

вместо: mysite.com?id=1,2,3

Я предпочитаю второй подход, но мне было любопытно, было ли на самом деле неправильно делать первый?

4 ответов


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

RFC 1738 в разделе 3.3 упоминается searchpart и что он должен идти после ? но, похоже, не уточняет его формат.

http://<host>:<port>/<path>?<searchpart>


Я не (потрудился) проверить, какой стандарт RFC определяет его. (Любой, кто знает об этом пожалуйста, оставьте ссылку в комментарии.) Но на практике mysite.com?id=1&id=2&id=3 путь-это уже то, как браузер будет производить, когда форма содержит дублированные поля, обычно флажки. Смотрите его в действии в этом w3schools пример страницы. Таким образом, есть хороший шанс, что любой язык программирования, который вы используете, уже предоставляет некоторые вспомогательные функции для анализа такого ввода и вероятно, возвращает список.

вы могли бы, конечно, пойти с вашим собственным подходом, таким как mysite.com?id=1,2,3, что не плохо в данном конкретном случае. Но вам нужно будет реализовать свою собственную логику для создания и потребления такого формата. Теперь вам может или не нужно думать об обработке некоторых угловых случаев самостоятельно, например: что делать, если вход не сформирован, например mysite.com?id=1,2,? И вам нужно изобрести еще один разделитель, если сам знак запятой также может быть допустимым входом, например mysite.com?name=Doe,John|Doe,Jane? Достигнете ли вы точки, в которой вы будете использовать строку json в качестве значения, например mysite.com?name=["John Doe", "Jane Doe"]? так далее. так далее.. Ваш пробег может отличаться.


в первом подходе вы получите массив значений querystring, но во втором подходе вы получите строку значений querystring.


стоит добавить, что несогласованная обработка повторяющихся параметров в URL-адресе на сервере может привести к уязвимостям, в частности загрязнение параметров HTTP на стороне сервера, с практическим примером - загрязнение параметров Http на стороне клиента-Yahoo! Классическое Почтовое Видео Poc.