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