Использование повторяющихся параметров в 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.