url资源是一个点(%2E)

时间:2010-10-04 15:30:22

标签: url encoding freemarker restlet

我的资源是. 这意味着我的网址如下所示: http://myapp/index/. 我需要添加查询参数,使其看起来像这样: http://myapp/index/.?type=xml 我使用Freemarker来表示我的资源,并针对这种情况进行了编码百分比编码:

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

这适用于Firefox。但所有其他浏览器,如IE,Safari,Chrom,Opera都忽略了我的网址编码点(http://myapp/index/%2E)。

有什么建议吗?

2 个答案:

答案 0 :(得分:20)

实际上,标准(RFC 3986)中没有明确说明...的百分比编码版本是否应该具有相同的此文件夹/ up-a - 文件夹意为未转义的版本。第3.3节仅讨论“路径段...”,但未说明它们是否在pct-encoding之前或之后与...匹配。

就我个人而言,我发现Firefox的解释%2E并不意味着.最实用,但不幸的是其他所有浏览器都不同意。这意味着您不能拥有仅包含...

的路径组件

我认为唯一可能的建议是“不要那样做”!还有其他路径组件也很麻烦,通常是由于服务器的限制:路径中的%2F%00%5C序列也可能被某些Web服务器和空路径段阻止也会造成问题。因此,通常不可能将所有可能的字节序列都放入路径组件中。

答案 1 :(得分:11)

这是不可能的。 §2.3说“。”是一个未保留的字符,“用相应的百分比编码的US-ASCII八位字节替换未保留字符的URI是等效的”。因此,/%2E%2E//../相同,并且会被标准化。

(这是bobince的答案和slowpoison的评论的组合。)