【问题标题】:A url resource that is a dot (%2E)一个点 (%2E) 的 url 资源
【发布时间】:2011-04-20 21:05:42
【问题描述】:

我有一个资源是 . 这意味着我的网址如下所示: @987654321@. 我需要添加查询参数,使其看起来像这样: @987654322@ 我使用Freemarker 来展示我的资源,并针对这种情况进行了百分比编码破解:

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

这适用于 Firefox。但所有其他浏览器,如 IE、Safari、Chrom、Opera 都会忽略我的 url 编码点 (@987654324@)。

有什么建议吗?

【问题讨论】:

    标签: url encoding freemarker restlet


    【解决方案1】:

    实际上,标准 (RFC 3986) 中并没有明确说明 ... 的百分比编码版本是否应该与未转义的 this-folder/up-a-folder 含义相同版本。 3.3 节只讨论了“路径段...”,并没有说明它们是否在pct-encoding 之前或之后匹配...

    我个人认为 Firefox 对%2E 的解释并不意味着. 最实用,但不幸的是所有其他浏览器都不同意。这意味着您不能拥有仅包含 ... 的路径组件。

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

    【讨论】:

    • 我发现即使 %2e 是 URL 的一部分,例如http://localhost/index%2ehtml、Firefox (14) 和 Chrome 将其转换为 .。这在第 2.3 节中有详细说明。稍后在第 3.3 节中,它说 ... 用于路径名中的相对引用。所以,http://localhost/%2e 本质上意味着http://localhost/
    • 好点,@slowpoison --“在用相应的百分比编码的 US-ASCII 八位字节替换未保留字符方面不同的 URI 是等效的”和“。”是一个毫无保留的角色。嗯嗯。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-08
      • 2020-09-25
      • 1970-01-01
      • 1970-01-01
      • 2020-03-02
      • 1970-01-01
      相关资源
      最近更新 更多