2012-03-01 12 views
8

Quello che non capisco è il vantaggio dell'uso di "?" invece di '&' negli URL:Separatore parametri in urls, il caso del punto interrogativo utilizzato in modo errato

question mark vs ampersand

Rende la vita di nessuno più facile se si usa un carattere diverso come il primo carattere di separazione. Riesci a trovare una spiegazione ragionevole?

EDIT: dopo ulteriori ricerche ho trovato che "&" può essere una parte del nome del file (termini & conditions.html) quindi "?" è un buon separatore. Ma penso ancora che usi "?" per i separatori fa vita più facile (da generatori url e parser punto di vista):

question mark as separator

c'è alcun vantaggio nel usando "&", che non è chiaro a prima vista?

risposta

7

Dal punto di vista della specifica URI (RFC 3986), l'unico separatore qui è "?". il formato della query è opaco; le e commerciali semplicemente sono qualcosa che HTML capita di usare per l'invio di moduli.

+0

Quindi si sono sviluppati in tempi diversi? L'HTML era lì prima dell'URI? –

+0

Sì, si sono sviluppati separatamente, ma no, l'HTML non era lì prima degli URI (precedentemente chiamati URL). –

+4

Quindi la risposta può essere qualcosa come "HTML e URI sviluppati separatamente e gli sviluppatori HTML non hanno notato il vantaggio di usare? Come separatore di parametri invece di &" eccetto che direi "non ho notato" non è accurato.Potrebbero avere una buona ragione. –

4

La risposta è più o meno in questo articolo - http://www.skorks.com/2010/05/what-every-developer-should-know-about-urls/. Per evidenziarlo, ecco:

Query è il modo preferito per inviare alcuni parametri a una risorsa su server. Queste sono coppie chiave = valore e sono separate dal resto dell'URL con un? (punto interrogativo) carattere e sono normalmente separati l'uno dall'altro da & (e commerciale) caratteri. Quello che potresti non sapere è il fatto che è legale separarli l'uno dall'altro; (punto e virgola) anche. I seguenti URL sono equivalenti:

http://www.blah.com/some/crazy/path.html?param1=foo&param2=bar

http://www.blah.com/some/crazy/path.html?param1=foo;param2

-1

RFC 3896 (https://www.ietf.org/rfc/rfc3986.txt) definisce delimitatori generali e sub ... '?' è un generale, '&' e ';' sono sub Le specifiche sono abbastanza chiare su questo.

In questo caso, il "?" i caratteri sarebbero trattati come parte della query. Se il parser della query segue rigorosamente la specifica, passerebbe l'intera query alla destinazione dell'app. Se la destinazione dell'app potrebbe scegliere di elaborare ulteriormente la stringa di query in un modo che tratta il? come un delimitatore di coppie nome-valore param, ciò dipende dai progettisti dell'applicazione.

La mia ipotesi è che questo spesso 'funziona solo' perché il codice che divide le stringhe di query e l'uri originale utilizza tutti i delimitatori per la corrispondenza: 1) la prima query viene divisa in "?" quindi 2) la stringa di query viene analizzata utilizzando la lista di corrispondenze char che include "?" (solo convenienza) ... Questo potrebbe verificarsi già nelle librerie di analisi onnipresenti.

+0

spiega i tuoi downvotes, per favore. – Rondo

Problemi correlati