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方法 规范在这方面有点含糊不清(或者可能是我对它的理解),但是当发布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以确定 如果它们匹配或不匹配,则客户端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方法 规范在这方面有点含糊不清(或者可能是我对它的理解),但是当发布
应该使用区分大小写的 八位字节与八位字节的比较 整个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是最重要的:-)理论上至少。。。