Я не вижу большой разницы между параметрами и строками запроса в URL-адресе. Так в чем же разница и когда следует использовать одно вместо другого?
Я не вижу большой разницы между параметрами и строками запроса в URL-адресе. Так в чем же разница и когда следует использовать одно вместо другого?
Ответы:
Компонент запроса обозначается первым ?
в URI. «Строка запроса» может быть синонимом (этот термин не используется в стандарте URI).
Некоторые примеры для HTTP URI с компонентами запроса:
http://example.com/foo?bar
http://example.com/foo/foo/foo?bar/bar/bar
http://example.com/?bar
http://example.com/?@bar._=???/1:
http://example.com/?bar1=a&bar2=b
( список разрешенных символов в компоненте запроса )
«Формат» компонента запроса зависит от авторов URI. Распространенным соглашением ( но не более чем соглашением, насколько это касается стандарта URI ¹) является использование компонента запроса для пар ключ-значение, иначе. параметры , как в последнем примере: bar1=a&bar2=b
.
Такие параметры также могут появляться в других компонентах URI, то есть в пути² и фрагменте. Что касается стандарта URI, вам решать, какой компонент и какой формат использовать.
Пример URI с параметрами в пути, запросе и фрагменте:
http://example.com/foo;key1=value1?key2=value2#key3=value3
¹ Стандарт URI говорит о компоненте запроса :
[…] Компоненты запроса часто используются для передачи идентифицирующей информации в виде пар «ключ = значение» […]
² Стандарт URI говорит о компоненте пути :
[…] Зарезервированные символы точки с запятой (";") и равенства ("=") часто используются для разделения параметров и значений параметров, применимых к этому сегменту. Зарезервированный символ запятой (",") часто используется для аналогичных целей.
Параметры - это пары "ключ-значение", которые могут появляться внутри URL-адреса и начинаться с точки с запятой ( ;
).
Строка запроса появляется после пути (если есть) и начинается с вопросительного знака (?
).
И параметры, и строка запроса содержат пары ключ-значение.
В GET
запросе параметры появляются в самом URL:
<scheme>://<username>:<password>@<host>:<port>/<path>;<parameters>?<query>#<fragment>
В POST
запросе параметры могут появляться в самом URL-адресе, а также в потоке данных (так называемом контенте).
Строка запроса всегда является частью URL-адреса.
Параметры могут быть form-data
скрыты в потоке данных при использовании метода POST, поэтому они могут не отображаться в URL-адресе. Да, POST
запрос может определять параметры как данные формы и в URL-адресе, и это не противоречит, потому что параметры могут иметь несколько значений.
Я пока не нашел объяснения такому поведению. Я предполагаю, что иногда может быть полезно «показать» параметры из POST
запроса или даже позволить коду, обрабатывающему GET
запрос, делиться некоторыми частями с кодом, обрабатывающимPOST
. Конечно, это может работать только с параметрами поддержки кода сервера в URL-адресе.
Пока вы не получите лучшего понимания, я предлагаю вам использовать параметры только в form-data
потоке данных POST
запросов.
Источники: