WebDAV服务器应该支持查询字符串吗?我还没有在RFC 4918中找到一个明确的声明。
背景如下:
我有一个WebDAV服务器,其中URL中的路径与文件系统中资源的路径近似1:1映射。也就是说,为了获得资源,我需要知道路径,比如:
Variant 1:
http://<webdavserver>:<port>/folder1/subfolder1/anotherfolder/resource.txt
现在我有另一个客户端,它不知道路径,但只有两个ID(RepositoryId和DocumentId(,但它们也唯一地标识资源。通过搜索这两个ID,WebDAV服务器也可以找到资源并返回它。
到目前为止,这是通过这样一种方式解决的,即两个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的"。。。
我只需要能够在服务器端区分两个URL表示中的哪一个到达那里,路径还是ID。可能是通过标头,类似X-ResourcePath: Path | Id
(默认为Path(
你觉得怎么样
我应该继续使用变体2,还是切换到变体3,或者。。。?(无论如何,我都必须重新实现它,所以"不要更改正在运行的系统"不是一个有效的参数:-(
IMHO:这真的没关系。没有禁止将查询参数混合到WebDAV URI树中。你只需要确保你支持的客户会处理好这件事。
(我建议不要将标识数据移动到自定义请求头字段中;这就是URI的作用(。
当我实现WebDAV服务器时,我主要对支持现有客户端感兴趣,我发现它们中的大多数都不支持任何方式的查询字符串(即Microsoft Office(
我最终使用了以下格式,似乎适用于所有客户:
protocol://server/id/title.extension