do_Http組件就是實現http/https協議的組件. 首先要說明一下,Do平臺只是一個移動端開發的平臺,不涉及任何後臺服務端的技術,你可以使用你自己任何熟悉的語言和技術來實現服務端,do_Http組件就是用來和服務端通信。 http是一個最基礎的應用層的通信協議,開發者應該很熟悉,但是在QQ群 ...
do_Http組件就是實現http/https協議的組件.
首先要說明一下,Do平臺只是一個移動端開發的平臺,不涉及任何後臺服務端的技術,你可以使用你自己任何熟悉的語言和技術來實現服務端,do_Http組件就是用來和服務端通信。
http是一個最基礎的應用層的通信協議,開發者應該很熟悉,但是在QQ群和很多同學討論,發現有不少人沒有很好的理解http。我這裡再簡單描述一下,熟悉的人就跳過吧。
協議的介紹
所謂協議
就是指http的客戶端和服務端的一個協商的一個標準,一個規範,是一個可以用文字來描述能用紙來記錄下來的文檔。
比如說假設一個規範規定
客戶端發送“hi”給服務端,服務端必須回答“hi client"
客戶端發送“hello”給服務端,服務端必須回答“hello hello”
......
那麼不管你客戶端是用Java還是什麼語言,服務端是用C#還是別的語言,都必須按照這個規範,都必須客戶端發hi
,服務端返回hi client
。
當然http協議要複雜很多,詳細的可以參考http協議的介紹。常用的語言比如Java,C#,ios等等都有這個協議的實現,do_Http也一樣。這些語言實現的方式各有不同,有不同名字的屬性,事件,方法,但是本質上都是實現這套規範。
HTTP通信的過程
- 客戶端利用一些屬性事件方法,拼接出一個請求報文。這個報文是有一定格式的,而且這個格式必須正確。報文通常分報文header和報文body。它的大概格式類似如下例子:
-
POST /sn/index HTTP/1.1 Accept: */* Accept-Language: zh-cn host: localhost Content-Type: application/x-www-form-urlencoded Content-Length: 12 Connection:close sn=123&n=asa
do_Http組件提供了一些屬性和方法來拼接這個請求報文:
body :post的數據
contentType:post的數據格式
method:數據請求的方法,基本的是GET,POST,也支持DELETE,PUT等標準
timeout:毫秒為單位的超時設置
url:請求的地址
setRequestHeader():設置header里的屬性和屬性值,可以執行多次,每次增加一條
- 客戶端把報文發送到服務端,do_Http組件提供了4個方法來處理,本質上這4個方法都是一樣,只不過為了方便,分成了4個應用不同的場景。
request():最基本的請求方法,通常只能發送文本
download():可以直接發送一個請求把服務端的文件下載下來保存到手機端,可以監控下載的進度。
upload():可以把本地的文件上傳到服務端,可以監控上傳的進度。
form():有點類似request和upload的混合,它可以同時發送多個文本也能發送多個文件。類似 web的表單提交。
-
服務端接受到客戶端發送過來的請求報文,然後解析成數據。這一塊和do平臺無關,可以用你自己熟悉的後臺開發語言來實現。
-
服務端對請求作出相應處理之後,返回一個 響應報文給前端,這個報文也是有格式的,報文通常分報文header和報文body。類似下麵的格式:
-
HTTP/1.1 200 OK Date: Sat, 31 Dec 2005 23:59:59 GMT Content-Type: text/html;charset=ISO-8859-1 Content-Length: 122 <html> <head> <title>Wrox Homepage</title> </head> <body> <!-- body goes here --> </body> </html>
這個步驟也和do平臺無關。
- 客戶端接收服務端返回的響應報文做相應的處理。
do_Http提供4個介面來處理返回的數據
fail:請求出錯事件
progress:發送和接受數據時可以用這個監控進度
result:發送後接受完數據會觸發這個事件
success:只有接受到狀態碼200才會觸發這個事件,這個事件不夠完善,還是用result事件更合適