我正在使用的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不指定尾部斜杠。因此,它取决于服务器如何比较和规范化这些。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top