Я не бачу великої різниці між параметрами та рядками запитів у 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запитів.
Джерела: