通过WebDAV创建集合时,集合的名称应以斜杠结尾
-
02-07-2019 - |
题
我正在使用的WebDAV库正在发出此请求
MKCOL /collection HTTP/1.1
对于哪个apache发出301因为/ collection存在
HTTP/1.1 301 Location: /collection/
而不是
HTTP/1.1 405 Method Not Allowed
规范对此有点模糊(或者可能是我对它的阅读),但是在发布MKCOL时,你的集合的名称是否总是以斜杠结尾(因为它是一个集合)?
解决方案
HTTP代码301表示“永久移动”如你所知。
Apache慷慨地将您重定向到正确的URL。它不能为您提供405,因为您提供的URL不存在任何资源。但它也无法使用该确切的URL创建资源。它可以做的是使用正确的URL创建资源,然后重定向您。
但是要回答你的问题,你应该用“/”结束集合。消除歧义,否则产生的URI规范化行为取决于我认为的服务器。我不相信任何RFC都强制要求使用尾部斜杠。
编辑:
MKCOL可能会在没有尾部斜杠的情况下成功,但请注意创建的报告资源有一个尾部斜杠。
根据RFC,服务器有一个选项。因为它确定了URL规范化过程,只要它不违反规范。
然后,服务器可以尝试规范化您在每次操作时发送的URL,返回大量3xx代码。这变得昂贵。或者它可以在开始时纠正你(POST,MKCOL等)然后失败或重定向。
但关键是它会始终让你知道它更喜欢的网址。
来自 RFC 2616 的HTTP URL方案
3.2.3 URI比较
比较两个URI来决定 如果他们匹配与否,客户
应该使用区分大小写 octet-by-octet比较 整个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])等同于他们的 ""%" HEX HEX“编码例如,以下三个 URI是等价的:
http://abc.com:80/~smith/home.html http://ABC.com/%7Esmith/home.html http://ABC.com:/%7esmith/home.html
请注意没有提及如何定义abs_path。根据规范,服务器也不能严格地忽略你的斜杠。因此,发布“MKCOL /集合”。并创建一个没有新的“/ collection /”的常规2xx网址不正确。
AFAIK,定义abs_path的相关RFC不指定尾部斜杠。因此,它取决于服务器如何比较和规范化这些。