我正在使用的WebDAV库正在发出此请求
MKCOL /collection HTTP/1.1
对于哪个apache发出301因为/ collection存在
HTTP/1.1 301 Location: /collection/
而不是
HTTP/1.1 405 Method Not Allowed
规范对此有点模糊(或者可能是我对它的阅读),但是在发布MKCOL时,你的集合的名称是否总是以斜杠结尾(因为它是一个集合)?
答案 0 :(得分:3)
如您所知,HTTP代码301的意思是“永久移动”。
Apache慷慨地将您重定向到正确的URL。它不能为您提供405,因为您提供的URL不存在任何资源。但它也无法使用该确切的URL创建资源。它可以做的是使用正确的URL创建资源,然后重定向您。
但是要回答你的问题,你应该用“/”结束集合以消除歧义,否则最终的URI规范化行为取决于我认为的服务器。我不相信任何RFC都强制要求使用尾部斜杠。
编辑:
MKCOL可能会在没有尾部斜杠的情况下成功,但请注意创建的报告资源有一个尾部斜杠。
根据RFC,服务器有一个选项。因为它确定了URL规范化过程,只要它不违反规范。
然后,服务器可以尝试规范化您在每次操作时发送的URL,返回大量3xx代码。这变得昂贵。或者它可以在开始时纠正你(POST,MKCOL等)然后失败或重定向。
但关键是它会始终让你知道它更喜欢的网址。
来自RFC 2616
的HTTP网址方案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 /”URL的常规2xx是不正确的。
AFAIK,定义abs_path的相关RFC不指定尾部斜杠。因此,它取决于服务器如何比较和规范化这些。