2012-03-08 2 views
5

Sto leggendo RFC2396 su URL che dice

Molti URI includono componenti costituiti o delimitato da alcuni, caratteri speciali. Questi caratteri sono chiamati "riservati", dal il loro utilizzo all'interno del componente URI è limitato allo scopo riservato .

ma la sezione da parte di query di URL (tra il? E #) dice

3,4. Componente di query Il componente di query è una stringa di informazioni che deve essere interpretata dalla risorsa .

query   = *uric 

All'interno di un componente di query, i caratteri ";", "/", "?" ":", "@", "&", "=", "+", "" e "$" sono riservati.

Qual è lo "scopo riservata di ciascuno di questi personaggi? Capisco quello &, = e + sono utilizzati per nella query, ma per quanto riguarda gli altri personaggi?

Più in concreto, dovrei sempre url encode quei personaggi quando sono nella query browser e server che ho visto maniglia: e, e altri personaggi senza essere codificati

risposta

5

penso che la sezione 2.2 di RFC 3986, che obsoletes RFC 2396, ha un spiegazione possibile. Cito:

Questi caratteri sono chiamati "riservati" perché possono (o non può) essere definito come delimitatori dalla sintassi generica, da ogni sintassi specifica-schema, o dalla sintassi specifico dell'implementazione dell'algoritmo dereferencing di un URI .

Penso che quello che Berners-Lee, et al. stanno cercando di ottenere qui è che anche se non tutti i caratteri riservati sono utilizzati nella sintassi generica descritta nella RFC , gli autori volevano lasciare abbastanza latitudine per gli schemi futuri o codice di implementazione specifico per essere in grado di utilizzare quei caratteri come videro in forma.

Quanto alla questione se si deve codificare questi personaggi, la mia opinione è che si dovrebbe ricerca e utilizzare un Percent-Encoding Algorithm che segue lo standard e non utilizzare un non-standard di uno o cercare di roll-your-own. Ad esempio, se si utilizza un linguaggio come C# o Python , le librerie fornite con tali lingue includono un'implementazione conforme all'algoritmo conforme agli standard. Per ulteriori dettagli su , la sezione 2.4 di RFC 3986 copre quando codificare o decodificare.

+0

Bella risposta. Sono sicuro che c'è un badge che ottieni per rispondere a una domanda di pochi mesi, congratulazioni! : P –

+0

C'è un badge per questo e si chiama "Revival" –