Я не вижу большой разницы между параметрами и строками запроса в URL-адресе. Так в чем же разница и когда следует использовать одно вместо другого?
91
Я не вижу большой разницы между параметрами и строками запроса в URL-адресе. Так в чем же разница и когда следует использовать одно вместо другого?
Ответы:
Компонент запроса обозначается первым
?
в URI. «Строка запроса» может быть синонимом (этот термин не используется в стандарте URI).Некоторые примеры для HTTP URI с компонентами запроса:
( список разрешенных символов в компоненте запроса )
«Формат» компонента запроса зависит от авторов URI. Распространенным соглашением ( но не более чем соглашением, насколько это касается стандарта URI ¹) является использование компонента запроса для пар ключ-значение, иначе. параметры , как в последнем примере:
bar1=a&bar2=b
.Такие параметры также могут появляться в других компонентах URI, то есть в пути² и фрагменте. Что касается стандарта URI, вам решать, какой компонент и какой формат использовать.
Пример URI с параметрами в пути, запросе и фрагменте:
¹ Стандарт URI говорит о компоненте запроса :
² Стандарт URI говорит о компоненте пути :
источник
Параметры - это пары "ключ-значение", которые могут появляться внутри URL-адреса и начинаться с точки с запятой (
;
).Строка запроса появляется после пути (если есть) и начинается с вопросительного знака (
?
).И параметры, и строка запроса содержат пары ключ-значение.
В
GET
запросе параметры появляются в самом URL:В
POST
запросе параметры могут появляться в самом URL-адресе, а также в потоке данных (так называемом контенте).Строка запроса всегда является частью URL-адреса.
Параметры могут быть
form-data
скрыты в потоке данных при использовании метода POST, поэтому они могут не отображаться в URL-адресе. Да,POST
запрос может определять параметры как данные формы и в URL-адресе, и это не противоречит, потому что параметры могут иметь несколько значений.Я пока не нашел объяснения такому поведению. Я предполагаю, что иногда может быть полезно «показать» параметры из
POST
запроса или даже позволить коду, обрабатывающемуGET
запрос, делиться некоторыми частями с кодом, обрабатывающимPOST
. Конечно, это может работать только с параметрами поддержки кода сервера в URL-адресе.Пока вы не получите лучшего понимания, я предлагаю вам использовать параметры только в
form-data
потоке данныхPOST
запросов.Источники:
Что каждый разработчик должен знать об URL-адресах
RFC 3986
источник