Qual è la differenza tra i parametri URL e le stringhe di query?


92

Non vedo molta differenza tra i parametri e le stringhe di query nell'URL. Allora qual è la differenza e quando dovrebbe essere usato uno sull'altro?


1
Hai un contesto, perché per quanto ne so, i due sono generalmente usati per lo stesso - ma il tuo caso potrebbe essere specifico del contesto.
Allan S. Hansen

Non ho un contesto specifico, è una domanda generale. In quale caso dovrei usare un modo invece dell'altro. Devono esserci usi diversi di questi due.
Konst

Personalmente, uso principalmente la parola parametro quando li prendo in un contesto di chiamata di variabile o metodo e stringa di query quando ne parlo nel contesto dell'URL. (ad esempio: la stringa di query è suddivisa in parametri per il metodo). Ma è solo il linguaggio, quindi il contesto e le situazioni differiscono e dubito che qualcuno ti darebbe la caccia per aver usato uno dei due quando "ne hai voglia" :).
Allan S. Hansen

Risposte:


85

Il componente query è indicato dal primo ?in un URI. "Stringa di query" potrebbe essere un sinonimo (questo termine non è utilizzato nello standard URI).

Alcuni esempi di URI HTTP con componenti di query:

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

( elenco di caratteri consentiti nel componente query )

Il "formato" del componente query spetta agli autori dell'URI. Una convenzione comune ( ma nient'altro che una convenzione, per quanto riguarda lo standard URI ¹) è quella di utilizzare il componente query per le coppie chiave-valore, aka. parametri , come nell'ultimo esempio sopra: bar1=a&bar2=b.

Tali parametri potrebbero anche apparire negli altri componenti URI, ovvero il percorso² e il frammento. Per quanto riguarda lo standard URI, sta a te decidere quale componente e quale formato utilizzare.

URI di esempio con parametri nel percorso, nella query e nel frammento:

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

¹ Lo standard URI dice sul componente query :

[…] I componenti di query sono spesso utilizzati per trasportare informazioni di identificazione sotto forma di coppie "chiave = valore" […]

² Lo standard URI dice sul componente path :

[…] I caratteri riservati punto e virgola (";") e uguale ("=") vengono spesso utilizzati per delimitare i parametri e i valori dei parametri applicabili a quel segmento. Il carattere riservato virgola (",") viene spesso utilizzato per scopi simili.


1
Parametro e query sono diversi. Vedere le sezioni 3.3 e 3.4 in tools.ietf.org/html/rfc2396.html
cowlinator

@cowlinator: (RFC 2396 è obsoleto, ma lo standard corrente, RFC 3986, dice qualcosa di simile sui parametri nel componente path ). Non ho affermato che sono la stessa cosa, o l'ho fatto? Gli autori di URI potrebbero specificare parametri nel componente query (come descritto nella mia risposta) e potrebbero anche specificare parametri nel componente path (come descritto nel tuo riferimento) - in entrambi i casi è solo una convenzione, niente che lo standard definisce. - Suggeriresti una modifica alla mia risposta? Pensi che OP significasse parametri nel percorso?
fino

30

I parametri sono coppie chiave-valore che possono essere visualizzate all'interno del percorso dell'URL e iniziano con un punto e virgola ( ;).

La stringa della query viene visualizzata dopo il percorso (se presente) e inizia con un punto interrogativo ( ?).

Sia i parametri che la stringa di query contengono coppie chiave-valore.

In una GETrichiesta, i parametri vengono visualizzati nell'URL stesso:

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

In una POSTrichiesta, i parametri possono apparire nell'URL stesso, ma anche nel flusso di dati (noto come contenuto).

La stringa di query fa sempre parte dell'URL.

I parametri possono essere form-datanascosti nel flusso di dati quando si utilizza il metodo POST in modo che non vengano visualizzati nell'URL. Sì, una POSTrichiesta può definire i parametri come dati del modulo e nell'URL, e questo non è incoerente perché i parametri possono avere diversi valori.

Finora non ho trovato spiegazioni per questo comportamento. Immagino che a volte potrebbe essere utile "mostrare" i parametri di una POSTrichiesta, o anche lasciare che il codice che gestisce una GETrichiesta condivida alcune parti con il codice che gestisce a POST. Ovviamente questo può funzionare solo con il codice del server che supporta i parametri in un URL.

Fino a quando non avrai approfondimenti migliori, ti suggerisco di utilizzare i parametri solo nel form-dataflusso di dati delle POSTrichieste.

Fonti:

Quello che ogni sviluppatore dovrebbe sapere sugli URL

RFC 3986

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.