Я не бачу великої різниці між параметрами та рядками запитів у 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, тобто path² та фрагменті. Що стосується стандарту URI, то від вас залежить, який компонент і який формат використовувати.
Приклад URI з параметрами у шляху, запиті та фрагменті:
http://example.com/foo;key1=value1?key2=value2#key3=value3
Standard Стандарт 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
запит, поділяти деякі частини з кодом, що обробляє a POST
. Звичайно, це може працювати лише з кодом сервера, що підтримує параметри в URL-адресі.
Поки ви не отримаєте кращого розуміння, я пропоную вам використовувати параметри лише в form-data
потоці даних POST
запитів.
Джерела: