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

Collections 通过WebDAV创建集合时,集合名称应以斜杠结尾,collections,webdav,Collections,Webdav,我正在使用的WebDAV库正在发出此请求 MKCOL /collection HTTP/1.1 MKCOL/collection HTTP/1.1 apache正在向其发出301,因为存在/集合 HTTP/1.1 301 Location: /collection/ HTTP/1.1 301 位置:/collection/ 而不是 HTTP/1.1 405 Method Not Allowed 不允许使用HTTP/1.1 405方法 规范在这方面有点含糊不清(或者可能是我对它的理解),但是当发布

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

MKCOL /collection HTTP/1.1 MKCOL/collection HTTP/1.1 apache正在向其发出301,因为存在/集合

HTTP/1.1 301 Location: /collection/ HTTP/1.1 301 位置:/collection/ 而不是

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

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

Apache正在优雅地将您重定向到正确的URL。它无法为您提供405,因为您提供的URL不存在任何资源。但它也无法创建具有该确切URL的资源。它可以做的是用正确的URL创建资源,然后重定向您

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

编辑:

MKCOL可能会在没有尾部斜杠的情况下成功,但请注意,报告创建的资源具有尾部斜杠

根据RFC,服务器有一个选项。因为它决定URL规范化过程,只要它不违反规范

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

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

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

3.2.3 URI比较

比较两个URI以确定 如果它们匹配或不匹配,则客户端
应该使用区分大小写的 八位字节与八位字节的比较 整个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是不正确的

另外,定义abs_路径的相关RFC不指定尾部斜杠。因此,这取决于服务器如何比较和规范这些内容。

HTTP代码301的意思是“永久移动”,如您所知

Apache正在优雅地将您重定向到正确的URL。它无法为您提供405,因为您提供的URL不存在任何资源。但它也无法创建具有该确切URL的资源。它可以做的是用正确的URL创建资源,然后重定向您

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

编辑:

MKCOL可能会在没有尾部斜杠的情况下成功,但请注意,报告创建的资源具有尾部斜杠

根据RFC,服务器有一个选项。因为它决定URL规范化过程,只要它不违反规范

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

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

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

3.2.3 URI比较

比较两个URI以确定 如果它们匹配或不匹配,则客户端
应该使用区分大小写的 八位字节与八位字节的比较 整个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是不正确的


另外,定义abs_路径的相关RFC不指定尾部斜杠。因此,这取决于服务器如何比较和规范这些数据。

我同意,如果我们的客户端遵循重定向到/collection/的命令,它将收到正确的响应代码。问题是,如果/collection/不存在,那么MKCOL/collection就会成功。报告中创建的URL后面有斜杠吗?这有点像说“我能吃个香蕉吗?”,Apache说“当然,这是你的橘子”。据报道创建的URL是最重要的:-)至少在理论上……我同意,如果我们的客户按照重定向到/collection/它会收到正确的响应代码。问题是,如果/collection/不存在,那么MKCOL/collection就会成功。报告中创建的URL后面有斜杠吗?这有点像说“我可以吃香蕉吗?”,Apache说“当然,这是你的橘子”。据报道,创建的URL是最重要的:-)理论上至少。。。