web-dev-qa-db-fra.com

Une ressource URL qui est un point (% 2E)

J'ai une ressource qui est un . Cela signifie que mon URL ressemble à ceci: http://myapp/index/. Et je dois ajouter des paramètres de requête pour que cela ressemble à ceci: http://myapp/index/.?type=xml J'utilise Freemarker pour la présentation de mes ressources et j'ai fait un hack d'encodage en pourcentage pour ce cas:

<#if key?matches("\\.")>
<li><a href="${contextPath}/index/%2E">${key}</a></li>
</#if>

Cela fonctionne bien pour Firefox. Mais tous les autres navigateurs comme IE, Safari, Chrom, Opera ignorent simplement mon point encodé par l'url (http://myapp/index/%2E).

Aucune suggestion?

23
cuh

En fait, il n'est pas vraiment clairement indiqué dans la norme ( RFC 3986 ) si une version codée en pourcentage de . ou .. est censé avoir la même signification de this-folder/up-a-folder que la version sans échappement. La section 3.3 ne parle que de "Les segments de chemin . et .. ”, Sans préciser s'ils correspondent à . et .. avant ou après le codage pct.

Personnellement, je trouve l'interprétation de Firefox que %2E ne signifie pas . le plus pratique, mais malheureusement tous les autres navigateurs ne sont pas d'accord. Cela signifie que vous ne pouvez pas avoir de composant de chemin contenant uniquement . ou ...

Je pense que la seule suggestion possible est "ne fais pas ça"! D'autres composants de chemin d'accès sont également gênants, généralement en raison des limitations du serveur: %2F, %00 et %5C les séquences des chemins peuvent également être bloquées par certains serveurs Web et le segment de chemin vide peut également provoquer des problèmes. Donc, en général, il n'est pas possible d'adapter toutes les séquences d'octets possibles dans un composant de chemin.

21
bobince

Ce n'est pas possible. §2. dit que "." est un caractère non réservé et que "les URI qui diffèrent par le remplacement d'un caractère non réservé par son octet US-ASCII codé en pourcentage correspondant sont équivalents". Par conséquent, /%2E%2E/ est le même que /../, et cela se normalisera.

(Ceci est une combinaison d'une réponse de bobince et d'un commentaire de slowpoison.)

11
phyzome