<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 7.1.1 Android網絡編程要學的東西與Http協議學習 ## 本節引言: > 不知不覺終于來到Android網絡編程這一章節,前面我們玩的都是單機,肯定是不過癮是吧, 本節開始我們來學習Android網絡編程相關的一些東西:Android端網絡編程要干嘛?Http協議 的學習,使用自帶扣腳Json解析類解析Json,XML解析的幾種常用方式,HttpUrlConnection和 HttpClient的使用,文件的上傳,下載;WebService的使用,WebView,Socket通信的使用等! > > 另外我們是客戶端,服務端的內容不在我們的范疇,而且小豬也不擅長,我們的最低要求是: **能夠掌握獲取與解析服務器反饋的數據的能力!** 好的,話不多說,開始本節內容! ## 1.Android與互聯網交互的三種方式 ![](http://www.runoob.com/wp-content/uploads/2015/09/49076488.jpg) ## 2.初識Http協議 > 實際開發中我們和服務端打交道一般用得都是基于Http協議的通信,所以學好Http協議是非常 重要的,當然,我們不用過于考究一些細節的東西,有個大體的了解即可!都是一些概念性的東西! ### 1)什么是Http協議? > 答:hypertext transfer protocol(超文本傳輸協議),TCP/IP協議的一個應用層協議,用于 定義WEB瀏覽器與WEB服務器之間交換數據的過程。客戶端連上web服務器后,若想獲得web服務器 中的某個web資源,需遵守一定的通訊格式,HTTP協議用于定義客戶端與web服務器通迅的格式。 ### 2)Http 1.0 與 Http 1.1的區別 > 答:1.0協議,客戶端與web服務器建立連接后,只能獲得一個web資源! 而1.1協議,允許客戶端與web服務器建立連接后,在一個連接上獲取多個web資源! ### 3)Http協議的底層工作流程: > 答:我們先要知道兩個名詞: > > * **SYN**(synchronous):TCP/IP建立連接時使用的握手信號 > * **ACK**(Acknowledgement):確認字符,確認發來的數據已經接受無誤 > > 接著就到**TCP/IP三次握手**的概念: > > * 客戶端發送syn包(syn = j)到服務器,進入SYN_SEND狀態,然后等待服務器確認 > * 服務器收到syn包,確認客戶的syn(ack = j + 1),同時在自己也發送一個SYN包(syn=k), 即SYN + ACK包,服務器進入SYN_RECV狀態 > * 客戶端收到SYN + ACK包,向服務器發送確認包ACK(ack = k +1),發送完畢后,客戶端與服務端 進入ESTABLISHED狀態,完成三次握手,然后兩者開始傳送數據 > > 如果還不是很清晰,我們再來看三次握手的示意圖: > > ![](http://www.runoob.com/wp-content/uploads/2015/09/65969107.jpg) > > 了解了是吧,然后我們就來看看Http操作的一個流程了: > > * 用戶點擊瀏覽器上的url(超鏈接),Web瀏覽器與Web服務器建立連接 > * 建立連接后,客戶端發送請求給服務器,請求的格式為: 統一資源標識符(URL)+協議版本號(一般是1.1)+MIME信息(多個消息頭)+一個空行 > * 服務端收到請求后,給予相應的返回信息,返回格式為: 協議版本號 + 狀態行(處理結果) + 多個信息頭 + 空行 + 實體內容(比如返回的HTML) > * 客戶端接收服務端返回信息,通過瀏覽器顯示出來,然后與服務端斷開連接;當然如果中途 某步發生錯誤的話,錯誤信息會返回到客戶端,并顯示,比如:經典的404錯誤! > > 對于上面的流程如果還不清晰,我們可以使用HttpWatch或者firefox抓下包: PS:測試網站是小豬的學校的教務系統,輸入賬號密碼后請求登陸,我們可以看到下述信息: > > **HTTP請求包含的內容:** > > ![](http://www.runoob.com/wp-content/uploads/2015/09/63675724.jpg) > > **HTTP響應包括的內容:** > > ![](http://www.runoob.com/wp-content/uploads/2015/09/71640548.jpg) > > 這就一目了然了是吧! ### 4)Http協議的業務流程 ![](http://www.runoob.com/wp-content/uploads/2015/09/76789394.jpg) ### 5)Http的幾種請求方式 > 實際開發中我們用得較多的方式是Get和Post,但是實際開發可能還會用到其他請求方式,比如PUT, 小豬的實際項目中就用到了,下面為了方便大家,就把所有的請求方式列出來吧: > > * **Get**:請求獲取Request-URI所標識的資源 > * **POST**:在Request-URI所標識的資源后附加新的數據 > * **HEAD** 請求獲取由Request-URI所標識的資源的響應信息報頭 > * **PUT**:請求服務器存儲一個資源,并用Request-URI作為其標識 > * **DELETE**:請求服務器刪除Request-URI所標識的資源 > * **TRACE**:請求服務器回送收到的請求信息,主要用于測試或診斷 > * **CONNECT**:保留將來使用 > * **OPTIONS**:請求查詢服務器的性能,或者查詢與資源相關的選項 ### 6)Get和Post的對比 > 用得最多的兩個,當然要做下對比啦! > > * **GET**:在請求的URL地址后以?的形式帶上交給服務器的數據,多個數據之間以&進行分隔, 但數據容量通常不能超過2K,比如:http://xxx?username=…&pawd=…這種就是GET > * **POST**: 這個則可以在請求的實體內容中向服務器發送數據,傳輸沒有數量限制 > * 另外要說一點,這兩個玩意都是發送數據的,只是發送機制不一樣,不要相信網上說的 "GET獲得服務器數據,POST向服務器發送數據"!!另外GET安全性非常低,Post安全性較高, 但是執行效率卻比Post方法好,一般查詢的時候我們用GET,數據增刪改的時候用POST!! ### 7)Http狀態碼合集 > 當然,這些狀態碼只是要給參考,實際上**決定權在服務器端(后臺的)**手上,一種方案是請求后, 服務器返回給我們的是狀態,或者另一種,在應用不用弄多語言版本的時候最好用,直接返回 一串結果信息的Json給我們,我們直接顯示就好,這樣可以偷懶不少!下面列下狀態碼合集,參考 下就好: > > * 100~199 : 成功接受請求,客戶端需提交下一次請求才能完成整個處理過程 > * 200: OK,客戶端請求成功 > * 300~399:請求資源已移到新的地址(302,307,304) > * 401:請求未授權,改狀態代碼需與WWW-Authenticate報頭域一起使用 > * 403:Forbidden,服務器收到請求,但是拒絕提供服務 > * 404:Not Found,請求資源不存在,這個就不用說啦 > * 500:Internal Server Error,服務器發生不可預期的錯誤 > * 503:Server Unavailable,服務器當前不能處理客戶端請求,一段時間后可能恢復正常 ### 8)Http協議的特點 > 概念性的東西,知道就好,別去背,百度百科的東西,直接復制粘貼: > > **1.** **支持客戶/服務器模式**。 > > **2.** **簡單快速**:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、 HEAD、POST。每種方法規定了客戶與服務器聯系的類型不同。 由于HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。 > > **3.** **靈活**:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。 > > **4.** **無連接**:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求, 并收到客戶的應答后,即斷開連接。采用這種方式可以節省傳輸時間。 > > **5.** **無狀態**:HTTP協議是無狀態協議。無狀態是指協議對于事務處理沒有記憶能力。 缺少狀態意味著如果后續處理需要前面的信息,則它必須重傳,這樣可能導致每 次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。 PS:關于OSI七層協議以及TCP四層模型就不在基礎系列講解了~有興趣可以自行了解下! ## 本節小結: > 本節講解了我們在Android開發中涉及到網絡方面的要完成的工具,以及講解了Http協議的 相關概念,相信大家對Android移動端與服務器交互已經有了個模糊的映像,下節我們來研究 Http協議的請求頭與響應頭!本節就到這里,謝謝~
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看