如何知道HTTP请求是否来自WebDav客户端?

时间:2016-10-18 13:40:16

标签: http server user-agent webdav

我正在创建一个Web文件管理器,最近我建议在其上实现WebDav,我认为这是一个非常好的主意。

我考虑过将webdav保存在像/webdav这样的单独网址中,但现在我正考虑将我创建的网络界面和webdav服务器保持在同一个网址上。

为了知道我是否应提供HTML页面或我需要知道的文件,如果从浏览器或webdav服务器访问它。我该怎么知道?用户代理是否足够?

如果是这样,我应该将哪些用户代理视为WebDav客户端?

谢谢!

2 个答案:

答案 0 :(得分:1)

不要这样做。使用User-Agent来确定服务器将要展示的行为通常是一个坏主意,对WebDAV来说也是一个坏主意。一些客户端使用多个用户代理,一些客户端使用非常通用(curl)的用户代理,而其他客户端则根本不提供一个。它会使您的系统变得脆弱,容易出错和非标准,因为我不能只构建WebDAV客户端并期望它能够工作,除非我模仿其中一个接受的用户代理。

话虽如此......你可能仍然能够避开User-Agent。 WebDAV使用PROPFIND HTTP方法,您可以使用该方法准确确定WebDAV客户端是否正在连接。

但是,它仍然使用GETPUT来获取和存储文件,并且必须在严格的WebDAV层次结构中构建系统。如果现有的url结构已经1:1与文件系统层次结构匹配,则可能会有效。

在某些方面,你只是构建一个WebDAV服务器,然后只有集合的html索引,这实际上有点普遍。

最后,考虑使用库而不是自己编辑。

来源:我是popular webdav framework的作者。

答案 1 :(得分:1)

您可能会使用Authenticated vs unauthenticated之类的内容来确定,但正如@evert所说,不要这样做。还阅读了DAV规范(RFC 2518)(http://www.webdav.org/specs/rfc2518.html

  

如果没有分布式创作功能,则不允许将源资源映射到URI   命名空间。实际上,阻止访问源资源已经存在   理想的安全利益。但是,如果远程编辑源   需要资源,源资源应该给予a   URI命名空间中的位置。此源位置不应为1   可以检索生成的输出的位置,因为   通常,服务器不可能区分请求   来自进程输出资源请求的源资源。那里   通常是源资源和源资源之间的多对多关系   输出资源。

这里的重要部分是

  

此源位置不应是可以检索>生成的输出的位置之一,因为通常>服务器无法区分对源资源的请求与>处理输出资源的请求