2010-10-21 8 views
8

So che% 20 e + decodificano entrambi allo stesso valore binario (uno spazio) e per la maggior parte dei server Web, in particolare quelli che eseguono la mappatura su file fisici, punteranno alla stessa risorsa.% 20 e + sono uguali in un URL http?

Ma la mia domanda è, deve un URL come http://www.example.org/hello%20world puntare alla stessa risorsa di http://www.example.org/hello+world, sono canonicamente lo stesso?

In HTTP/1.0 + non è stato associato a uno spazio, quindi mi sto chiedendo specificamente di HTTP/1.1.

+0

Mai considerato questo prima, sarà interessante vedere la risposta corretta su questa bella domanda. – Dave

risposta

4

Solo all'interno della stringa di query: il segno più è un carattere riservato, quindi deve essere codificato per passare un '+' effettivo nel percorso o nella stringa di query. Il suo uso come sostituto di spazi è una W3C Recommendation che si applica solo alla stringa di query:

All'interno della stringa di query, il segno più è riservato come notazione abbreviata per uno spazio. Pertanto, i veri segni positivi devono essere codificati. Questo metodo è stato utilizzato per semplificare il passaggio degli URI di query nei sistemi che non consentivano spazi.

URI Confronto (RFC 2616):

Quando si confrontano due URI per decidere se corrispondono o no, un client deve utilizzare case-sensitive octet-by-ottetto confronto di tutta la URI, con queste eccezioni:

- A port that is empty or not given is equivalent to the default 
    port for that URI-reference; 

    - Comparisons of host names MUST be case-insensitive; 

    - Comparisons of scheme names MUST be case-insensitive; 

    - An empty abs_path is equivalent to an abs_path of "/". 

caratteri diversi da quelli del "riservata" e " "set" non sicuri (vedi RFC 2396 [42]) equivalgono alla loro codifica "HEX HEX" "%".

caratteri riservati (RFC 2396)

";" | "/" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | ","

Quindi, sul terzo go-around: non c'è nulla di ufficiale che li dichiari come la stessa cosa. Usare '+' letteralmente per direzionare http://example.org/hello+world in una directory chiamata hello+world non è corretto, ma non c'è nulla che dice che dovrebbe essere considerato equivalente a uno spazio.

+1

Nella sezione citata dice "** All'interno della stringa di query, ** il segno più è riservato come notazione abbreviata per uno spazio." All'interno di una stringa di query non è la stessa cosa all'interno dell'URL in generale. Nel caso generale la risposta è no, tuttavia potrebbe essere – Davy8

+1

Nell'esempio dell'OP di 'http: // www.example.org/hello% 20world' e' http: // www.example.org/hello + world' La sezione che hai citato non si applica perché non fa parte di una stringa di query. – Davy8

+0

@ Davy8 - Penso che tu mi abbia dato un calcio alla risposta corretta ora :) –

Problemi correlati