L'url de la ressource en un point (%2E)
J'ai une ressource qui est un .
Cela signifie que l'adresse de ma page ressemble à ceci:
http://myapp/index/.
Et j'ai besoin d'ajouter des paramètres de requête, de sorte qu'il ressemble à ceci:
http://myapp/index/.?type=xml
J'utilise Freemarker pour la présentation de mes ressources et un pour cent de codage de hack pour ce cas:
<#if key?matches("\\.")>
<li><a href="${contextPath}/index/%2E">${key}</a></li>
</#if>
Cela fonctionne très bien pour Firefox. Mais tous les autres Navigateurs comme IE, Safari, Chrome, Opera simplement ignorer mon url encodé point (http://myapp/index/%2E
).
Des suggestions?
Vous devez vous connecter pour publier un commentaire.
C'est en fait pas vraiment clairement indiqué dans la norme (RFC 3986) si un pour cent-version codée de
.
ou..
est censé avoir la même chose-un dossier/un-un-dossier de sens que le non échappés version. L'article 3.3 ne parle que de la “Le chemin des segments.
et..
”, sans préciser si elles correspondent.
et..
avant ou après la pct-encodage.Personnellement, je trouve Firefox interprétation que
%2E
ne signifie pas.
plus pratique, mais malheureusement tous les autres navigateurs sont en désaccord. Cela signifie que vous ne pouvez pas avoir un composant du chemin ne contenant que des.
ou..
.Je pense que la seule suggestion est “ne pas faire”! Il y a d'autres composants de chemin qui sont trop gênants, généralement en raison de limitations du serveur:
%2F
,%00
et%5C
séquences dans les chemins d'accès peut également être bloqué par certains serveurs web, et le vide d'un segment de tracé peut également causer des problèmes. Donc, en général, il n'est pas possible pour s'adapter à tous les possible les séquences d'octets dans un composant du chemin.http://localhost/index%2ehtml
, Firefox (14) et Chrome convertir.
. Ceci est spécifié dans la section 2.3. Plus tard dans la section 3.3, il est dit que.
et..
sont pour référence relative dans le chemin. Donc,http://localhost/%2e
essentiellement à direhttp://localhost/
.Il n'est pas possible. §2.3 dit que le "." est une adhésion sans réserve du caractère et que "les Uri qui diffèrent dans le remplacement d'une adhésion sans réserve caractère avec son correspondant pour cent codé US-ASCII octet sont équivalentes". Par conséquent,
/%2E%2E/
est le même que/../
, et qui sera normalisé loin.(C'est une combinaison d'une réponse en bobince et un commentaire par slowpoison.)