Spazi negli URL?

w3fools afferma che gli URL possono contenere spazi: http://w3fools.com/#html_urlencode

È vero? Come può un URL contenere uno spazio non codificato?

Ho l’impressione che la riga di richiesta di una richiesta HTTP utilizzi uno spazio come delimitatore, essendo formattato come {the method}{space}{the path}{space}{the protocol} :

 GET /index.html http/1.1 

Quindi, come può un URL contenere uno spazio? Se è ansible, da dove viene la pratica di sostituire gli spazi con + ?

Un URL non deve contenere uno spazio letterale. Deve essere codificato utilizzando la codifica percentuale o una codifica diversa che utilizza caratteri URL-safe (come application / x-www-form-urlencoded che utilizza + anziché %20 per gli spazi).

Ma se l’affermazione è giusta o sbagliata dipende dall’interpretazione: sintatticamente, un URI non deve contenere uno spazio letterale e deve essere codificato; semanticamente, a %20 non è uno spazio (ovviamente) ma rappresenta uno spazio.

Sono davvero sciocchi. Se guardi l’Appendice A dell’RFC 3986 , vedrai che lo “spazio” non viene semplicemente menzionato da nessuna parte nella grammatica per definire un URL. Poiché non è menzionato da nessuna parte nella grammatica, l’unico modo per codificare uno spazio è con la codifica %20 ( %20 ).

In effetti, RFC afferma anche che gli spazi sono delimitatori e dovrebbero essere ignorati:

In alcuni casi, potrebbe essere necessario aggiungere spazi bianchi extra (spazi, interruzioni di riga, tabulazioni, ecc.) Per interrompere un URI lungo attraverso le linee. Lo spazio bianco deve essere ignorato quando viene estratto l’URI.

e

Per motivi di robustezza, il software che accetta l’URI tipizzato dall’utente dovrebbe tentare di riconoscere e rimuovere entrambi i delimitatori e gli spazi bianchi incorporati.

Curiosamente, l’uso di + come codifica per lo spazio non è menzionato nella RFC, sebbene sia riservato come sub-delimitazione. Sospetto che il suo utilizzo sia o solo convenzionale o coperto da una RFC diversa (probabilmente HTTP).

Gli spazi sono semplicemente sostituiti da “% 20” come:

http://www.example.com/my%20beautiful%20page

Le informazioni ci sono penso parzialmente corrette:

Non è vero. Un URL può usare spazi. Nulla definisce che uno spazio sia sostituito da un segno +.

Come hai notato, un URL NON può usare spazi. La richiesta HTTP si sarebbe rovinata. Non sono sicuro di dove sia definito il + , sebbene %20 sia standard.