Como decodificar um caractere de escape reservado em um URI de solicitação em um servidor Web?

É bastante claro que um servidor da Web precisa decodificar qualquer caractere não reservado que não seja salvo (como alfanuméricos, etc.) para fazer a comparação do URI. Por exemplo,http://www.example.com/~user/index.htm deve ser idêntico ahttp://www.example.com/%7Euser/index.htm.

Minha pergunta é: o que vamos fazer com os caracteres reservados que escapara

Um exemplo seria%2F ou/. Se houver um%2F no URI da solicitação, caso o analisador do servidor da Web o substitua por um/? No exemplo acima, isso significa quehttp://www.example.com/~user%2Findex.htm seria o mesmo quehttp://www.example.com/~user/index.htm? Embora eu tenha tentado em um servidor Apache (2.2.17 Unix) e parece que ele dá um erro "404 não encontrado"

Então isso significa%2F e outros caracteres reservados escapados devem ser deixados em paz (pelo menos antes da comparação de URI

Informações de fundo:

Existem dois locais no RFC 2616 (HTTP 1.1) que mencionam o problema de decodificação de escape:

O Request-URI é transmitido no formato especificado na seção 3.2.1. Se o URI do Pedido for codificado usando a codificação "% HEX HEX" [42], o servidor de origem DEVE decodificar o URI do Pedido para interpretar adequadamente o pedido. Os servidores devem responder a solicitações de URIs inválidas com um código de status apropriad

s caracteres que não sejam os conjuntos "reservados" e "não seguros" (consulte a RFC 2396 [42]) são equivalentes à codificação ""% "HEX HEX" "

(de acordo comhttp: //trac.tools.ietf.org/wg/httpbis/trac/ticket/ "inseguro" é um erro e deve ser removido das especificações. Então, nós estamos olhando apenas para "reservado" aqui.)

FYI, a definição desses caracteres na RFC 2396:

reserved = ";" | "/" | "?" | ":" | "@" "E" | "=" "+" "!$21$!quot; | ","

unreserved = alfanum | marc

mark = "-" | "_" "." | "!" | "˜" | "*" "" "(" | ")"

questionAnswers(1)

yourAnswerToTheQuestion