【问题标题】:How are URLs with ../ formatted?带有 ../ 的 URL 是如何格式化的?
【发布时间】:2020-02-13 15:32:56
【问题描述】:

我已经尝试过这种格式的 URL:

https://A.com/B/../C

据我所知,它们总是被重新格式化:

https://A.com/B/../C becomes https://A.com/C
https://A.com/B/C/../C/D becomes https://A.com/B/C/D

这是 URL 标准的一部分,还是取决于浏览器或服务器?

您可以尝试以下示例: https://stackoverflow.com/questions/ask/../ask/../../questions/ask

【问题讨论】:

    标签: url url-routing


    【解决方案1】:

    是的,它是 RFC 3986 的一部分

    path definition我们可以阅读

    路径段“.”和“..”,也称为点段,是 为路径名层次结构中的相对引用而定义。他们 旨在用于相对路径引用的开头 (第 4.2 节)指示层次结构中的相对位置 名字树。

    later我们可以看到这些相关段是如何处理的,

                 [...]
                  else
                     T.path = merge(Base.path, R.path);
                     T.path = remove_dot_segments(T.path);
                  endif;
                 [...]
    

    以及../C 的相对部分将如何将merged基础 https://A.com/B 转换为https://A.com/../C

    返回一个由引用的路径组件组成的字符串 附加到基本 URI 路径的最后一段以外的所有部分(即, 排除基本 URI 中最右边的“/”之后的任何字符 路径,或者排除整个基本 URI 路径(如果它不包含) 任何“/”字符)。

    还有点/../ 将如何得到replaced by /

    [...]

    • C.如果输入缓冲区以前缀“/../”或“/..”开头, 其中“..”是一个完整的路径段,然后替换它 在输入缓冲区中以“/”为前缀并删除最后一个 输出中的段及其前面的“/”(如果有) 缓冲; [...]

    所以我们可以得到最终的https://A.com/C

    【讨论】:

      猜你喜欢
      • 2013-10-08
      • 1970-01-01
      • 2023-04-01
      • 2016-09-05
      • 2019-09-13
      • 1970-01-01
      • 2011-07-20
      • 1970-01-01
      • 2016-03-10
      相关资源
      最近更新 更多