Ho un sito che tratta "/" e "% 2F" nella porzione percorso (non la stringa di query) di un URL in modo diverso. È una cosa brutta da fare secondo la RFC o il mondo reale?È una barra ("/") equivalente a una barra codificata ("% 2F") nella porzione di percorso di un URL HTTP
Chiedo perché continuo a correre piccole sorprese con il framework web che sto usando (Ruby on Rails) così come i livelli sottostanti (Passenger, Apache, ad esempio, ho dovuto abilitare "ALLOW_ENCODED_SLASHES" per Apache) . Ora mi sto appoggiando a eliminare completamente le barre codificate, ma mi chiedo se dovrei archiviare segnalazioni di bug in cui vedo strani comportamenti che coinvolgono le barre codificate.
Quanto al perché ho le barre codificate, in primo luogo, in fondo io sono rotte come questo:
:controller/:foo/:bar
dove: foo è qualcosa come un percorso che può contenere barre. Ho pensato che la cosa più semplice da fare sarebbe stata la sola URL di escape foo
in modo che le barre fossero ignorate dal meccanismo di routing. Ora ho dei dubbi, ed è abbastanza chiaro che i framework non supportano veramente questo, ma secondo la RFC è sbagliato farlo in questo modo?
Ecco alcune informazioni che ho raccolto:
RFC 1738 (URL):
Di solito un URL ha la stessa interpretazione quando un ottetto è rappresentato da un personaggio e quando è codificato. Tuttavia, questo non è vero per i caratteri riservati: la codifica di un carattere riservato per uno schema particolare può cambiare la semantica di un URL.
RFC 2396 (URI):
Questi caratteri sono chiamati "riservati", dal momento che il loro utilizzo all'interno del componente URI è limitata allo scopo riservata. Se i dati di un componente URI sono in conflitto con lo scopo riservato, i dati in conflitto devono essere preceduti da escape prima di formare l'URI.
(si fa sfuggire qui media qualcosa di diverso che codifica il carattere riservato?)
RFC 2616 (HTTP/1.1):
personaggi diversi da quelli nella "riservata" e "non sicuri "set (vedi RFC 2396 [42]) sono equivalenti alla loro codifica" "%" HEX HEX ".
C'è anche this bug report per Rails, dove sembrano aspettarsi che la barra codificata a comportarsi in modo diverso:
destro, mi aspetto risultati diversi perché sono indicando diverse risorse.
Cerca il file letterale "foo/bar" nella directory principale. La versione senza escape sta cercando la barra dei file nella directory pippo.
E 'chiaro dalle RFC che raw vs encoded è l'equivalente per i caratteri non riservati, ma qual è la trama per i caratteri riservati?
Correlato: http://stackoverflow.com/q/14631200/1591669 – unor
PHP Gli utenti che utilizzano un front controller: $ _GET e $ _REQUEST sono già urldecoded. Ciò potrebbe causare problemi con le barre poiché non sarai in grado di dire quale fosse una barra e cosa fosse un% 2F. Se hai assolutamente bisogno di vedere la richiesta così come è stata inviata, guarda in $ _SERVER ['REQUEST_URI']. Vedi anche [urldecode() @ php.net] (http://php.net/manual/en/function.urldecode.php) –