Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android之Http通信——1.初識Http協議

Android之Http通信——1.初識Http協議

編輯:關於Android編程

Android之Http通信——1.初識Http協議

Android之Http通信1初識Http協議 引言 正文 Http是什麼鬼 名詞解析 Http 10 與 Http 11的區別 Http請求的工作流程 Http請求的幾種方式 Http狀態碼合集 Http協議的特點 OSI七層協議TCP四層協議 總結

引言:


今天是六一兒童節,先在這裡給各位超齡兒童說聲節日快樂哈~( ╯□╰ ),小豬也象征性地給群裡的小朋友們派了紅包…嗯,忙碌的五月終於過去了,做畢設,寫論文,拍畢業照,答辯,辭職,各種各樣的事,也算忙完了,好吧,小豬現在又在一家新的公司上班了,第三間公司了,你們肯定會覺得小豬三心二意是吧,畢竟才差不多畢業就換了那麼多家公司,然後可能問我,”小豬你什麼時候跳第四間公司”,哈哈,應該不會了哈,怎麼說呢,其實我還是很專一的,畢竟我才剛畢業,我還暫時不需要去養家糊口,贍養老人,而且我沒女朋友,哈哈~所以趁著年輕,選擇適合自己的生長的土壤,學多點本事,工資其實沒什麼,真的,能學到東西才是關鍵,等真正有本事了,那個時候就可以談工資了,比如我這個公司的大牛(不過這周已跳槽到魅族了),第一次感覺到大牛的氣息,B格真心高,自愧不如,人家自己寫組件,推送,各種代碼封裝,各種設計模式,而且會服務端,測試,IOS…有點看小說裡,一個剛入門的小學徒看到一個宗師級別的高手時那種感覺,曾經,小豬自卑了幾天,一直在想,我真的能接手他的項目嗎?或者說看懂他代碼?又或者我能否寫出這樣的代碼?那幾天,整個人都很浮躁,各種負面情緒,連代碼都看不進去;後來不經意看到了一個講設計的TED演講,標題是:《如何成為一名優秀的設計師:羅子雄》,這個雖然不是說編程的,但是其實很多東西都是相通的,分為兩個階段:入門&准專業級,”你們希望你們希望成為一名設計師,但不止如此,你們希望成為的是一名優秀的設計師。但沒有人生下來就是優秀的,沒有人生下來就是牛逼的,沒有人生下來就會UI設計,會平面設計,會網頁設計。”,從入門到准專業級,我們需要多少經驗?”格拉德威爾在《異類》一書中指出:“人們眼中的天才,並非卓越非凡,而是付出了持續不斷的努力,一萬小時的錘煉是任何人從平凡變成超凡的必要條件。”一萬小時,也就是說你每天工作8小時的時間,每周工作5天,你需要5年。你無需天才,無需智商過人,無需三頭六臂,無需頭上長角,你只需要持續的、堅持的努力,有正確的方法,就能夠在設計領域,一個專業中獨當一面。”看完,整個人就闊讓開朗了,心也就靜下來了,對啊,人家做多久,我做多久了?人家做五年了,我只是個剛畢業的實習生,不會很正常啊,很多東西,急不來,每天有規劃,一步一個腳印,日積月累,堅持5年,或者不用,我也能成為一個准專業級的大牛是吧,所以何必自卑呢~恩呢,心靈雞湯的東西就講這麼多吧,喝多了酒沒作用了,視頻還是不錯的,有興趣可以看看哈,好了,從今天開始小豬會在學習公司項目的同時總結相關的一些東西,然後分享給大家,第一個章節講解的是Android中的Http通信,先敘述下Http相關的一些概念,然後講下Android上發送Http請求的兩種方式:HttpUrlConnection與HttpClient,然後使用retrofit框架封裝我們的HTTP請求,最後用RxJava實現響應式編程,實現網絡的異步請求調用,當然小豬也是在學習當中,如果有什麼寫得不對的地方,歡迎指出,萬分感激~


正文:

1.Http是什麼鬼?

①名詞解析:

hypertext transfer protocol(超文本傳輸協議),TCP/IP協議的一個應用層協議,用於定義WEB浏覽器與WEB服務器之間交換數據的過程。客戶端連上web服務器後,若想獲得web服務器中的某個web資源,需遵守一定的通訊格式,HTTP協議用於定義客戶端與web服務器通迅的格式。

②Http 1.0 與 Http 1.1的區別:

1.0協議,客戶端與web服務器建立連接後,只能獲得一個web資源! 1.1協議,允許客戶端與web服務器建立連接後,在一個連接上獲取多個web資源!

PS:現在大部分的都是用的Http 1.1協議的~

③Http請求的工作流程:

這裡先介紹兩個名詞,SYN和ACK

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狀態,完成三次握手,然後兩者開始傳送數據

如果你覺得復雜的話,看圖想想你就有個大概印象了,三次握手示意圖如下:

Tcp三次握手vcfrx/O686OsuPjT6M/g06a1xLe1u9jQxc+io6y3tbvYuPHKvc6qOjxiciAvPg0KCdCt0umw5rG+usUgKyDXtMys0NAotKbA7b3hufspICsgtuC49tDFz6LNtyArIL/V0NAgKyDKtczlxNrI3SixyMjnt7W72LXESFRNTCkgv827p7bLvdPK1bf+zvG2y7e1u9jQxc+io6zNqLn95K/AwMb3z9TKvrP2wLSjrMi7uvPT67f+zvG2y7bPv6rBrL3To7u1sci7yOe5+9bQzb7Es7K9t6LJ+rTtzvO1xLuwo6y07c7z0MXPorvht7W72LW9v827p7bLo6yyos/Uyr6jrLHIyOejur6tteS1xDQwNLTtzvM8L2Jsb2NrcXVvdGU+DQo8cD66w7DJo6xObyBwaWMgeW91IHNheSBhIGpio6zT0M2809DV5s/go6zPwsPmztLDx9PDSHR0cFdhdGNowLTXpc/CsPwotbHIu6OsxOPSsr/J0tTWsb3T08NDaHJvbWUgZjEyKaOs1eLA77LiytS1xM341b7Kx9Ch1u3Rp9CjtcS9zM7xz7XNszrK5Mjr1cu6xcPcwuu686Ost6LLzbXHwr3H68fzo6zP4LnY0MXPos23o6zWwdPaz+C52LXE0MXPos23o6zO0sPHz8K92tTZz+rPuL2yveJ+o7o8L3A+DQo8cD5IVFRQx+vH87D8uqy1xMTayN06PC9wPg0KPHA+PGltZyBhbHQ9"HTTP請求的內容" src="/uploadfile/Collfiles/20150602/2015060208391956.png" title="\" />

HTTP響應包括的內容:

HTTP響應的內容

④Http請求的幾種方式:

我們看到上面我們發送http請求的方式是POST,它和GET在我們平時開發中使用較多,下面我們就羅列出所有的請求方式吧:

Get:請求獲取Request-URI所標識的資源 POST:在Request-URI所標識的資源後附加新的數據 HEAD 請求獲取由Request-URI所標識的資源的響應信息報頭 PUT:請求服務器存儲一個資源,並用Request-URI作為其標識 DELETE:請求服務器刪除Request-URI所標識的資源 TRACE:請求服務器回送收到的請求信息,主要用於測試或診斷 CONNECT:保留將來使用 OPTIONS:請求查詢服務器的性能,或者查詢與資源相關的選項

好吧,除了GET和POST其他的,筆者也沒用過,所以,這裡只區分GET和POST的區別:

GET:在請求的URL地址後以?的形式帶上交給服務器的數據,多個數據之間以&進行分隔,但數據容量通常不能超過2K,比如:http://xxx?username=…&pawd=…這種就是GET POST: 這個則可以在請求的實體內容中向服務器發送數據,傳輸沒有數量限制 另外要說一點,這兩個玩意都是發送數據的,只是發送機制不一樣,不要相信網上說的”GET獲得服務器數據,POST向服務器發送數據”!!
另外GET安全性非常低,Post安全性較高,但是執行效率卻比Post方法好,一般查詢的時候我們用GET,數據增刪改的時候用POST!!

⑤Http狀態碼合集:

100~199 : 成功接受請求,客戶端需提交下一次請求才能完成整個處理過程 200: OK,客戶端請求成功 300~399:請求資源已移到新的地址(302,307,304) 401:請求未授權,改狀態代碼需與WWW-Authenticate報頭域一起使用 403:Forbidden,服務器收到請求,但是拒絕提供服務 404:Not Found,請求資源不存在,這個就不用說啦 500:Internal Server Error,服務器發生不可預期的錯誤 503:Server Unavailable,服務器當前不能處理客戶端請求,一段時間後可能恢復正常

⑥Http協議的特點

好吧,這些東西知道就可以了,小豬就不自己慢慢扣了,直接復制粘貼哈~

支持客戶/服務器模式。 簡單快速:客戶向服務器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與服務器聯系的類型不同。 由於HTTP協議簡單,使得HTTP服務器的程序規模小,因而通信速度很快。 靈活:HTTP允許傳輸任意類型的數據對象。正在傳輸的類型由Content-Type加以標記。 無連接:無連接的含義是限制每次連接只處理一個請求。服務器處理完客戶的請求,並收到客戶的應答後,即斷開連接。采用這種方式可以節省傳輸時間。
5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的信息,則它必須重傳,這樣可能導致每 次連接傳送的數據量增大。另一方面,在服務器不需要先前信息時它的應答就較快。

⑦OSI七層協議&TCP四層協議;

恩,這個我們知道就可以了,後續有需要的話再深入了解,我們的HTTP請求是出於第七層:應用層的,
大家知道就可以了,另外最好記下這七層,對了,一到三層是用於創建兩個網絡設備間的物理連接的,
而四到七層主要負責互操作性,背熟就好,面試說不定問下呢,是吧,哈哈~

OSI七層協議圖&TCP四層模型圖:

OSI七層協議圖&TCP四層模型圖:

另外小豬查相關資料的時候,發現一個B格更高的總結圖,有興趣的可以慢慢研究:
TCP/IP七層模型總結圖

貼下原文鏈接,想刨根問底的可以看下:

OSI七層模型詳解

總結:

好吧,因為時間比較倉促,畢竟只能下班的時候寫寫,可能有點亂,望體諒,有時間會重新捋一捋思路,部分內容參考的慕課網的”Android HTTP通信“視頻的 內容,有興趣可以去慕課看看,恩,最後總結下本節的東東吧:

介紹了下HTTP協議的一些概念、 簡單的說了下HTTP 1.0 和HTTP 1.1的區別 HTTP請求的流程,包括SYN和ACK的概念,TCP/IP三次握手,HTTP操作的流程,HTTP請求的幾種幾種方式,HTTP狀態碼合集,以及HTTP協議特點 OSI七層協議圖&TCP四層模型圖

本節都是一些概念性的東西,了解了解就好,下一節,我們來研究不同的響應頭,我們服務端通過設置不同的響應頭來控制浏覽器的一些行為,比如頁面從定向,定時刷新,提示文件下載等,敬請期待~好了,洗澡睡覺,明天繼續上班哼(ˉ(∞)ˉ)唧~

PS:剛捨友路過,問我一晚上在扣什麼?寫代碼麼,我說寫博,然後他又問這能賺錢麼?我說不能,然後他說,那寫了有個卵用…我也不知道怎麼跟他解釋,每個人的看法,價值觀不同吧,我喜歡寫博,盡管我不是大牛,我寫出來的東西B格也沒人家高,可能都是一些基礎的東西,盡管如此,我還是願意在下班吃完飯後,埋頭碼字一個晚上,不積跬步何以千裡,持續的,堅持的努力,再加上正確的方法,小豬也有成為大牛的那一天的,另外,把摸索出來的方法寫出來,又可以方便後來者,何樂而不為呢?是吧!與各位攻城獅們共勉~加油

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved