Care este diferența dintre parametrii URL și șirurile de interogare? (Programare, Url, Șir De Interogare, Parametri Url)

Konst a intrebat.

Nu văd o mare diferență între parametrii și șirurile de interogare, în URL. Deci, care este diferența și când ar trebui să fie folosit unul în locul celuilalt?

Comentarii

  • Aveți un context, pentru că, din câte știu eu, cele două sunt în general folosite pentru același lucru – dar cazul dumneavoastră ar putea fi specific contextului. –  > Por Allan S. Hansen.
  • Nu am un context specific, este o întrebare generală. În ce caz ar trebui să folosesc o modalitate în loc de cealaltă. Trebuie să existe utilizări diferite ale celor două. –  > Por Konst.
  • Personal – eu folosesc mai ales cuvântul parametru atunci când vorbesc despre ei în contextul unei variabile sau al unui apel de metodă, iar șir de interogare atunci când vorbesc despre ei în contextul URL. (de exemplu: șirul de interogare este împărțit în parametri pentru metodă). Dar este vorba doar de limbaj, astfel încât contextul și situațiile diferă și mă îndoiesc că cineva v-ar vâna pentru că folosiți oricare dintre ele atunci când „simțiți” nevoia :). –  > Por Allan S. Hansen.
2 răspunsuri
unor

The componenta de interogare este indicată de prima ? dintr-un URI. „Șir de interogare” ar putea fi un sinonim (acest termen nu este utilizat în standardul URI).

Câteva exemple de URI-uri HTTP cu componente de interogare:

http://example.com/foo?bar
http://example.com/foo/foo/foo?bar/bar/bar
http://example.com/?bar
http://example.com/[email protected]_=???/1:
http://example.com/?bar1=a&bar2=b

(listă de caractere permise în componenta de interogare)

„Formatul” componentei de interogare este la latitudinea autorilor URI. O convenție obișnuită (dar nimic mai mult decât o convenție, în ceea ce privește standardul URI¹) este utilizarea componentei de interogare pentru perechi cheie-valoare, aka. parametri, , ca în ultimul exemplu de mai sus: bar1=a&bar2=b.

Astfel de parametri ar putea apărea și în celelalte componente URI, și anume calea² și fragmentul. În ceea ce privește standardul URI, depinde de dumneavoastră ce componentă și ce format să utilizați.

Exemplu de URI cu parametri în calea, interogarea și fragmentul:

http://example.com/foo;key1=value1?key2=value2#key3=value3

¹ Standardul URI spune despre componenta de interogare:

[…] componentele de interogare sunt adesea utilizate pentru a transporta informații de identificare sub forma unor perechi „cheie=valoare” […]

² Standardul URI spune despre componenta de cale:

[…] caracterele rezervate punct și virgulă („;”) și egal („=”) sunt adesea utilizate pentru a delimita parametrii și valorile parametrilor aplicabile segmentului respectiv. Caracterul rezervat virgulă („,”) este adesea utilizat în scopuri similare.

Comentarii

  • Parametru și interogare sunt diferite. A se vedea secțiunile 3.3 și 3.4 din tools.ietf.org/html/rfc2396.html –  > Por cowlinator.
  • @cowlinator: (RFC 2396 este învechit, dar standardul actual, RFC 3986, spune ceva similar despre parametrii din componenta path). Nu am afirmat că sunt identice, nu-i așa? Autorii URI ar putea specifica parametrii în componenta de interogare (așa cum este descris în răspunsul meu) și ar putea, de asemenea, să specifice parametrii în componenta de cale (așa cum este descris în referința dvs.) – în ambele cazuri este doar o convenție, nimic din ceea ce definește standardul. — Ați sugera o modificare a răspunsului meu? Credeți că OP s-a referit la parametrii din traseu? –  > Por unor.
Laurent Caillette

Parametrii sunt perechi cheie-valoare care pot apărea în interiorul căii URL și care încep cu un caracter punct și virgulă (;).

Șirul de interogare apare după calea (dacă există) și începe cu un caracter semn de întrebare (?).

Atât parametrii, cât și șirul de interogare conțin perechi cheie-valoare.

Într-un GET cerere, parametrii apar în URL-ul propriu-zis:

<scheme>://<username>:<password>@<host>:<port>/<path>;<parameters>?<query>#<fragment>

Într-un POST cerere, parametrii pot apărea în URL-ul propriu-zis, dar și în fluxul de date (cunoscut sub numele de conținut).

Șirul de interogare este întotdeauna o parte a URL-ului.

Parametrii pot fi înglobați în form-data datastream atunci când se utilizează metoda POST, astfel încât este posibil ca aceștia să nu apară în URL. Da, un POST cerere poate defini parametrii ca date de formular și în URL, iar acest lucru nu este inconsecvent deoarece parametrii pot avea mai multe valori.

Până acum nu am găsit nicio explicație pentru acest comportament. Presupun că ar putea fi util uneori să „dezascunzi” parametrii dintr-un POST cerere, sau chiar să se permită codului care gestionează o cerere GET cerere să împartă unele părți cu codul care gestionează o cerere POST. Desigur, acest lucru poate funcționa numai cu codul serverului care suportă parametrii într-un URL.

Până când veți obține informații mai bune, vă sugerez să utilizați parametrii numai în form-data fluxul de date din POST cereri.

Surse:

Ce ar trebui să știe fiecare dezvoltator despre URL-uri

RFC 3986