前言

    在之前一篇文章【keepass+坚果云管理我的密码】中我使用了坚果云的WebDav服务来让我的KeePass实现多平台和设备共享数据库文件。然后我就想学一学WebDav是什么,有什么用,以及如何使用。在这之前我也用过相关网络存储功能的服务,用来保存我定时打包的备份文件,当时考虑用百度网盘这类网盘工具,但是API太难用了,授权啥的也很麻烦,而且还需要创建应用,而我只想简单的上传和下载一下我的文件而已。当时的解决方案是使用【gdrive】命令行工具,感觉虽然略微复杂,但仍然比百度网盘简单(PS:别问我为啥用谷歌产品,因为服务器在墙外)。但这次用坚果云的WebDav让我看到了更简单的上传下载网盘文件的方案,我甚至都不用安装额外的工具,只使用curl命令行就能实现文件上传下载到网盘的功能,简直牛逼plus啊。下面就展示我学习WebDav的记录吧。

初识WebDav

    放上【WebDAV官网】,上面关于WebDAV的介绍:简而言之:WebDAV代表“基于Web的分布式创作和版本控制”。它是HTTP协议的一组扩展,允许用户协作编辑和管理远程web服务器上的文件。我理解的WebDav其实就是一个http请求而已,只是拿来做的事情是管理服务上的文件。不过呢,通过一些特殊的规则让服务器对特殊的http请求进行相应的逻辑处理,使得管理服务器文件更方便且功能更丰富。注意:认证这块确实比较简陋,用Basic Auth方式认证,比较容易被攻击。所以我一般都会为文件进行加密,或者用别的方案保证文件传输的安全性,比如KeePass使用key文件,即使数据库文件被人盗用也打不开。

有哪些支持webdav的网盘?

国外网盘:Box、Dropbox、teracloud、yandex、TransIP

国内网盘:坚果云、城通网盘

私有云:OwnCloud、Seafile 、群晖

目前国内最好用的支持webdav:坚果云

当然支持WebDav协议的应用大家可以自行百度额,像我使用的KeePass就可以使用WebDav。好像WPS也支持,不过没试过。这里是坚果云帮助里面介绍相关应用使用WebDav【点击跳转

WebDAV的特性和优势

  • 支持创建、修改、复制、移动、移除、查询、列举文件
  • 文件锁
  • 版本控制
  • 支持修改文件属性
  • 安全完善的身份验证机制
  • 支持https加密
  • 支持proxy
  • 客户端缓存
  • 方便的客户端工具:和局域网中的文件共享一样简单使用。

对比ftp协议,身份验证、加密、支持proxy、客户端缓存都是webdav的优势。在http传输上,ftp一个文件需要建立一个新连接;而webdav只要一个tcp连接,传输更高效。

服务端的搭建

    由于我只想用坚果云的服务,不想自己搭建服务器,所以没有去了解不过Nginx官网有个配置WebDav的方式【点击跳转】,大家有兴趣可以去自己试试看。网上也有很多WebDav的服务器,我还在GitHub上搜索WebDav,能搜到很多服务器的代码,有兴趣可以自己找找看吧。

调用WebDav接口

    官方关于WebDav的介绍【点击跳转】,安排的明明白白,虽然我英语比较差,但我翻译软件玩的贼溜,还是勉强能看懂的。注意,下面的username为坚果云的账号,password为坚果云的应用密码,不是登录密码额,详情看坚果云的帮助文档吧。

PROPFIND方法

PROPFIND方法检索在由请求URI标识的资源上定义的属性,一般这个请求用来查看路径下的目录和文件,结果会有这些文件的名称和属性等。

curl --user "username:password" --request PROPFIND https://dav.jianguoyun.com/dav/

PROPPATCH方法

PROPPATCH方法处理请求正文中指定的指令,以设置和/或删除在由请求URI标识的资源上定义的属性。

curl --user "username:password" --request PROPFIND https://dav.jianguoyun.com/dav/test.txt

MKCOL方法

MKCOL方法是创建目录。

curl --user "username:password" --request PROPFIND https://dav.jianguoyun.com/dav/test.txt

PUT方法

PUT方法用于上传文件。

curl --user "username:password" --request PUT https://dav.jianguoyun.com/dav/test.sql --data "body"
上面命令执行后,去查看文件内容会变为"body" curl --user "username:password" --request PUT https://dav.jianguoyun.com/dav/test.sql --data @C:\body.txt
上面命令执行后,去查看文件内容会变为"C:\body.txt"的文件内容

GET方法

GET方法用于下载文件,下面命令就能方便的下载文件。

curl --user "username:password" --request GET https://dav.jianguoyun.com/dav/test.sql --output test.sql

DELETE方法

DELETE方法用于删除文件或文件夹。

curl --user "username:password" --request DELETE https://dav.jianguoyun.com/dav/test.sql

COPY方法

COPY方法用于复制文件,url为源文件,header中的Destination为目标文件地址。

curl --user "username:password" --request COPY https://dav.jianguoyun.com/dav/a/test.sql --header "Destination: https://dav.jianguoyun.com/dav/b/test.sql"
上面命令会将"/a/test.sql"复制到"/b/test.sql"里面。

MOVE方法

MOVE方法用于移动文件,url为源文件,header中的Destination为目标文件地址。

curl --user "username:password" --request MOVE https://dav.jianguoyun.com/dav/a/test.sql --header "Destination: https://dav.jianguoyun.com/dav/b/test.sql"
上面命令会将"/a/test.sql"移动到"/b/test.sql"里面。

LOCK和UNLOCK方法

这两种方法我基本不用,我看文档里面是需要传xml的body内容,实现也很简单,这里就不研究了。

总结

  1. 首先本文只是做一个简单的介绍,以及简单的命令行示例。如果需要自己编程实现,我觉得把curl命令行变成代码那是超级简单的事情吧。
  2. 特别需要注意这些接口的幂等特性,我看官方文档有些有介绍的。比如有时候编程不检查结果导致同个请求发送多次,自己需要测好异常情况。
  3. 官方文档里面有xml的请求体,用来表示不同的功能,我上面都没有带上,所以都是使用的默认请求。如果自己有需要就去【官方文档】自行查看吧。

学习WebDav的更多相关文章

  1. 学习笔记36—坚果云 | Papership或Zotero使用webDAV验证服务器不成功怎么办?

    很多人都喜欢用坚果云作为Zotero的第三方云盘,从而无限扩展Zotero的存储空间.可是大家在Papership或zotero客户端中验证坚果云webDAV服务器时,会出现验证不成功的问题,相信这个 ...

  2. tomcat集群学习记录1--初识apache http server

    起因 平时开发的时候我都是用eclipse把代码部署到本地tomcat的,当然只会去跑1台tomcat啦... 偶尔有时候解决问题需要去公司测试环境找日志.连上公司测试环境以后发现竟然有2台weblo ...

  3. 白话学习MVC(九)View的呈现一

    一.概述 本节来看一下ASP.NET MVC[View的呈现]的内容,View的呈现是在Action执行之后进行,Action的执行生成一个ActionResult,[View的呈现]的功能就是:通过 ...

  4. Apache-Maven学习(转)

    之前听同学说过关于他们公司使用Maven框架来做项目管理,后来也跟他一起参与过一个小的项目,但没有仔细的去搞,现在好好学习一下. 文章转载自:易百教程 [http:/www.yiibai.com] A ...

  5. IIS FTP Server Anonymous Writeable Reinforcement, WEBDAV Anonymous Writeable Reinforcement(undone)

    目录 . 引言 . IIS 6.0 FTP匿名登录.匿名可写加固 . IIS 7.0 FTP匿名登录.匿名可写加固 . IIS >= 7.5 FTP匿名登录.匿名可写加固 . IIS 6.0 A ...

  6. 转载:Hadoop权威指南学习笔记

    转自:http://pieux.github.io/blog/2013-05-08-learn-hadoop-the-definitive-guide.html 1 前言 Hadoop的内部工作机制: ...

  7. XML学习教程

    XML学习进阶1-- 什么是XML. 为什么使用 XML?... 什么是 XML?... 数据的结构表示... XML 文档... 数据是从表示和处理中分离出来的... 使XML数据自描述... XM ...

  8. linux学习:【第3篇】远程连接及软件安装

    狂神声明 : 文章均为自己的学习笔记 , 转载一定注明出处 ; 编辑不易 , 防君子不防小人~共勉 ! linux学习:[第3篇]远程连接及软件安装 远程连接 xshell , xftp软件官网 : ...

  9. HTTP协议学习笔记(三)

    HTTP协议学习笔记(三) 1.状态码告知从服务器端返回的请求结果 状态码的职责是当客户端向服务端向服务端发送请求时,描述返回的请求结果.借助状态码,用户可以知道服务端是正常处理了请求,还是出现了错误 ...

随机推荐

  1. 面试【JAVA基础】锁

    1.锁状态 锁的状态只能升级不能降级. 无锁 没有锁对资源进行锁定,所有线程都能访问并修改同一个资源,但同时只有一个线程能修改成功.其他修改失败的线程会不断重试,直到修改成功,如CAS原理和应用是无锁 ...

  2. ES6特性整理

    ESMAScript6.0 ES6 兼容 IE10+ .Chrome.Firefox 要想兼容IE10以下的有两种方法: 用 babel 工具 borwer.js ,在 script 标签里添加 ty ...

  3. js拖拽原理及简单实现(渣渣自学)

    第一步 首先简单分析下需求吧,我们就是想实现鼠标拖拽带颜色的方块时,让方块停留在鼠标松开的位置,需要计算的就是拖拽前的坐标和拖拽后的坐标,鼠标移动后相对于原位置的偏移量=目标元素的偏移量,根据这个等式 ...

  4. Linux:配置apache支持php

    对apache的主配置文件进行修改 vi /application/apache/conf/httpd.conf 1.增加下面内容 AddType application/x-httpd-php .p ...

  5. docker下jira数据备份和还原注意路径

    重点:jira页面上的备份与恢复页面的路径,跟我实际路径是有出入的,如果找不到就用find去搜下备份文件就知道怎么操作了 1.登录jira后,右上角的系统——左侧的导入与导出——选择里面的备份与恢复 ...

  6. [LeetCode]67. 二进制求和(字符串)(数学)

    题目 给你两个二进制字符串,返回它们的和(用二进制表示). 输入为 非空 字符串且只包含数字 1 和 0. 题解 两个字符串从低位开始加,前面位不够补0.维护进位,最后加上最后一个进位,最后反转结果字 ...

  7. [LeetCode]面试题67. 把字符串转换成整数

    题目 写一个函数 StrToInt,实现把字符串转换成整数这个功能.不能使用 atoi 或者其他类似的库函数. 首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止. 当我们 ...

  8. TCP连接问题之CLOSE_WAIT和TIME_WAIT过多

    参考博文 https://dengqsintyt.iteye.com/blog/2086485 Timeout waiting for connection异常排查:https://blog.csdn ...

  9. Oracle学习(十二)标量函数

    UCASE()大写转换  LCASE()小写转换 --把查询结果对应的列进行大写转换 SELECT UCASE(列) FROM 表; --把查询结果对应的列进行小写转换 SELECT LCASE(列) ...

  10. 精心总结ansible-playbook剧本的这6种变量

    #变量作用 #根据需求灵活修改,如:需要安装不同版本号的服务,或进行版本升级回退等 1.通过vars定义变量 #1.1.定义一个变量 version: 1.1.2 #定义多个变量 vars: - v1 ...