É uma barra (“/”) equivalente a uma barra codificada (“% 2F”) na parte do caminho de um URL HTTP

Eu tenho um site que trata "/" e "% 2F" na parte do caminho (não a string de consulta) de uma URL de forma diferente. Isso é algo ruim para se fazer de acordo com o RFC ou o mundo real?

Eu pergunto porque eu continuo correndo em pequenas surpresas com o framework web que estou usando (Ruby on Rails), bem como as camadas abaixo disso (Passenger, Apache, por exemplo, eu tive que habilitar "ALLOW_ENCODED_SLASHES" para o Apache). Eu estou agora inclinado a me livrar completamente das barras codificadas, mas eu me pergunto se eu deveria estar arquivando relatórios de bugs onde eu vejo um comportamento estranho envolvendo as barras codificadas.

Por que eu tenho as barras codificadas em primeiro lugar, basicamente eu tenho rotas como esta:

:controller/:foo/:bar

onde: foo é algo como um caminho que pode conter barras. Eu pensei que a coisa mais simples a fazer seria apenas escapar URLfoo Portanto, as barras são ignoradas pelo mecanismo de roteamento. Agora estou tendo dúvidas, e está bem claro que os frameworks realmente não suportam isso, mas de acordo com a RFC é errado fazer isso dessa maneira?

Aqui estão algumas informações que eu juntei:

RFC 1738 (URLs):

Normalmente, uma URL tem a mesma interpretação quando um octeto é representado por um caractere e quando é codificado. No entanto, isso não é verdadeiro para caracteres reservados: a codificação de um caractere reservado para um esquema específico pode alterar a semântica de um URL.

RFC 2396 (URIs):

Esses caracteres são chamados de "reservados", já que seu uso dentro do componente URI é limitado ao seu propósito reservado. Se os dados de um componente de URI entrassem em conflito com a finalidade reservada, os dados conflitantes devem ter escape para formar o URI.

(escapar aqui significa algo diferente de codificar o caractere reservado?)

RFC 2616 (HTTP / 1.1):

Caracteres diferentes daqueles nos conjuntos "reservado" e "inseguro" (ver RFC 2396 [42]) são equivalentes à sua codificação ""% "HEX HEX".

Há tambémeste relatório de bug para Rails, onde eles parecem esperar que a barra codificada se comporte de maneira diferente:

Certo, eu esperaria resultados diferentes porque eles estão apontando para diferentes recursos.

Ele está procurando pelo arquivo literal 'foo / bar' no diretório raiz. A versão não escapada está procurando pela barra de arquivos no diretório foo.

É claro a partir dos RFCs que raw vs. codificado é o equivalente para caracteres não reservados, mas qual é a história para personagens reservados?

questionAnswers(5)

yourAnswerToTheQuestion