DAV

DAV不僅被看作HTTP的擴展,甚至被看作一種網路檔案系統(network filesystem );

A final goal of DAV is to leverage the success of HTTP in being a standard access layer for a wide range of storage repositories -- HTTP gave them read access, while DAV gives them write access.

基本介紹

  • 中文名:DAV
  • 外文名:DAV
  • 性質HTTP的擴展
  • 操作條件鎖定、查找、移動、創建、列舉
操作條件,協定打開,

操作條件

當然,它不可能像本地檔案系統一樣隨心所欲,它支持的操作還是有限的,以下三條:
1. 支持鎖定,Client可以先Lock Server上的file,然後操作;
2. 查找、定位,即DASL協定,DAV的一個子協定;
3. 拷貝、移動、創建、列舉,:不知道為什麼叫做Namespace manipulation;

協定打開

用FrontPage、Excess等打開、編輯遠程網站用的就是這個協定,它使得FrontPage可以編輯、覆蓋、刪除Server上的檔案。
首先看看DASL協定是如何查找Server端的檔案系統:
總原則:使用Request傳送XML格式的查詢字元串(Request-URI),得到Response,包含查詢結果(也是XML格式);
Request-URL語法的一般形式:
<d:searchrequestxmlns:d="DAV:"><d:basicsearch><d:select><d:prop><d:getcontentlength/></d:prop></d:select><d:from><d:scope><d:href>/container1/</d:href><d:depth>infinity</d:depth></d:scope></d:from><d:where><d:gt><d:prop><d:getcontentlength/></d:prop><d:literal>10000</d:literal></d:gt></d:where><d:orderby><d:order><d:prop><d:getcontentlength/></d:prop><d:ascending/></d:order></d:orderby></d:basicsearch></d:searchrequest>
下面是獲取url下所有目錄、檔案信息的C#代碼,目的就是組合一個 HTTP頭+Request-URL:
//url指定Server端的檢索目錄,我認為也可以通過Request-URL的DAV:where部分來定:HttpWebRequestRequest=(HttpWebRequest)HttpWebRequest.Create(url);Request.Headers.Add("Translate:f");Request.Credentials=CredentialCache.DefaultCredentials;stringrequestString="<?xmlversion=\"1.0\"encoding=\"utf-8\"?>"+"<a:propfindxmlns:a=\"DAV:\">"+"<a:prop>"+"<a:displayname/>"+"<a:iscollection/>"+"<a:getlastmodified/>"+"</a:prop>"+"</a:propfind>";MessageBox.Show(requestString.ToString());//只是顯示一下Request-URLRequest.Method="PROPFIND";//有GET、POST、PROPFIND.....if(deep==true)//設定伺服器上的檢索深度Request.Headers.Add("Depth:infinity");elseRequest.Headers.Add("Depth:1");Request.ContentLength=requestString.Length;Request.ContentType="text/xml";StreamrequestStream=Request.GetRequestStream();requestStream.Write(Encoding.ASCII.GetBytes(requestString),0,Encoding.ASCII.GetBytes(requestString).Length);requestStream.Close();HttpWebResponseResponse;StreamReaderrespStream;try{Response=(HttpWebResponse)Request.GetResponse();respStream=newStreamReader(Response.GetResponseStream());}catch(WebExceptione){.....}

相關詞條

熱門詞條

聯絡我們