代码之家  ›  专栏  ›  技术社区  ›  Dave Cheney

通过WebDAV创建集合时,集合名称应以斜杠结尾

  •  1
  • Dave Cheney  · 技术社区  · 18 年前

    我正在使用的WebDAV库正在发出此请求

    MKCOL /collection HTTP/1.1
    

    apache正在向其发出301,因为存在/集合

    HTTP/1.1 301
    Location: /collection/
    

    HTTP/1.1 405 Method Not Allowed
    

    规范在这方面有点含糊不清(或者可能是我对它的理解),但是当发布MKCOL时,您的集合的名称是否应该总是以斜杠结尾(因为它是一个集合)?

    1 回复  |  直到 18 年前
        1
  •  3
  •   kervin    18 年前

    HTTP代码301表示您知道的“永久移动”。

    但要回答您的问题,您应该以“/”结束集合以消除歧义,否则产生的URI规范化行为将取决于服务器。我不相信任何RFC都会强制添加尾部斜杠。

    编辑:

    然后,服务器可以尝试在每次操作中正常化您发送的URL,返回大量3xx代码。这会很贵。或者它可以在开始时纠正您(POST、MKCOL等),然后失败或重定向。

    但关键的一点是,它总是让你知道它喜欢的URL。

    关于HTTP URL方案的一些信息来自 RFC 2616

    3.2.3 URI比较

    如果他们匹配或不匹配,客户
    八位字节与八位字节的比较

      - A port that is empty or not given is equivalent to the default
        port for that URI-reference;
    
        - Comparisons of host names MUST be case-insensitive;
    
        - Comparisons of scheme names MUST be case-insensitive;
    
        - An empty abs_path is equivalent to an abs_path of "/".
    

    中的字符以外的字符
    RFC 2396[42])相当于其 “%”十六进制编码。

    例如,以下三个 URI等效于:

      http://abc.com:80/~smith/home.html
      http://ABC.com/%7Esmith/home.html
      http://ABC.com:/%7esmith/home.html
    

    注意,没有提到如何定义abs_路径。此外,严格来说,服务器也不能根据规范忽略斜杠。因此,发出“MKCOL/collection”并获得一个常规的2xx,而不创建新的“/collection/”URL是不正确的。