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.