Es una barra diagonal ("/") equivalente a una barra codificada ("% 2F") en la parte de la ruta de una URL HTTP

Tengo un sitio que trata "/" y "% 2F" en la parte de la ruta (no en la cadena de consulta) de una URL de manera diferente. ¿Es esto algo malo de hacer de acuerdo con el RFC o el mundo real?

Lo pregunto porque sigo teniendo pequeñas sorpresas con el marco web que estoy usando (Ruby on Rails), así como con las capas debajo de eso (Pasajero, Apache, por ejemplo, tuve que habilitar "ALLOW_ENCODED_SLASHES" para Apache). Ahora me inclino por deshacerme completamente de las barras codificadas, pero me pregunto si debería presentar informes de errores en los que veo un comportamiento extraño relacionado con las barras codificadas.

En cuanto a por qué tengo las barras codificadas en primer lugar, básicamente tengo rutas como esta:

:controller/:foo/:bar

donde: foo es algo así como una ruta que puede contener barras diagonales. Pensé que lo más sencillo sería simplemente escapar de la URLfoo por lo tanto, las barras son ignoradas por el mecanismo de enrutamiento. Ahora tengo dudas, y está bastante claro que los marcos no son realmente compatibles con esto, pero de acuerdo con el RFC, ¿es incorrecto hacerlo de esta manera?

Aquí hay alguna información que he recopilado:

RFC 1738 (URL):

Por lo general, una URL tiene la misma interpretación cuando un octeto está representado por un carácter y cuando se codifica. Sin embargo, esto no es cierto para los caracteres reservados: la codificación de un carácter reservado para un esquema particular puede cambiar la semántica de una URL.

RFC 2396 (URI):

Estos caracteres se llaman "reservados", ya que su uso dentro del componente URI está limitado a su propósito reservado. Si los datos para un componente de URI entran en conflicto con el propósito reservado, entonces los datos en conflicto deben escaparse antes de formar el URI.

(¿Escapar aquí significa algo más que codificar el carácter reservado?)

RFC 2616 (HTTP / 1.1):

Los caracteres distintos a los de los conjuntos "reservados" e "inseguros" (consulte RFC 2396 [42]) son equivalentes a su codificación ""% "HEX HEX".

También hayeste informe de error para Rails, donde parecen esperar que la barra codificada se comporte de manera diferente:

Bien, esperaría resultados diferentes porque apuntan a recursos diferentes.

Está buscando el archivo literal 'foo / bar' en el directorio raíz. La versión no escapada está buscando la barra de archivos dentro del directorio foo.

De acuerdo con las RFC, queda claro que el código en bruto vs. codificado es el equivalente para los caracteres no reservados, pero ¿cuál es la historia de los personajes reservados?

Respuestas a la pregunta(5)

Su respuesta a la pregunta