WebDAV 服务器应该支持查询字符串吗?

Should a WebDAV server support query strings?

WebDAV 服务器应该支持查询字符串吗? 我在 RFC 4918 中没有找到关于此的明确声明。

背景如下:
我有一个 WebDAV 服务器,其中 URL 中的路径被准 1:1 映射到文件系统中资源的路径。 IE。要获取资源,我需要知道路径,如下所示:

Variant 1:
http://<webdavserver>:<port>/folder1/subfolder1/anotherfolder/resource.txt

现在我有另一个不知道路径的客户端,但只有两个 Id(RepositoryId 和 DocumentId),但这些也唯一标识资源。通过搜索这两个id,WebDAV服务器也可以找到资源并return它。
到目前为止,解决方法是将两个 ID 指定为查询字符串,而不是 URL 中的路径,即类似这样的内容:

Variant 2:
http://<webdavserver>:<port>/?repoId=123&docId=456

不知怎的,这感觉不对...

好吧,实际上通过两个 id 的标识只是路径的另一种表示,不是吗?所以这样的事情也应该有效:

Variant 3:
http://<webdavserver>:<port>/<repoId>/<docId>
http://<webdavserver>:<port>/123/456

这感觉更“WebDAV-like”...

我只需要能够在服务器端区分两个 URL 表示中的哪一个到达那里,路径还是 ID。 可能通过 header,类似 X-ResourcePath: Path | Id(默认为路径)

你怎么看?
我应该继续使用变体 2,还是切换到变体 3,或者...? (无论如何我都必须重新实现它,所以“不要更改 运行 系统”将不是一个有效的论点:-))

当我实现 WebDAV 服务器时,我主要对支持现有客户端感兴趣,但我发现它们中的大多数都不以任何方式支持查询字符串(即 Microsoft Office)

我最终使用了以下似乎适用于所有客户的格式:

protocol://server/id/title.extension

恕我直言:真的没关系。不禁止将查询参数混合到 WebDAV URI 树中。您只需要确保您支持的客户可以使用它。

(我建议不要将识别数据移动到自定义请求 header 字段中;这就是 URI 的用途)。