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

來源:互聯網
上載者:User

標籤:cli   調用   each   服務端   版本   使用者   protoc   它的   ret   

Android之Http通訊——1.初識Http協議引言:

今天是六一兒童節,先在這裡給各位超齡兒童說聲節日快樂哈~( ╯□╰ ),小豬也象徵性地給群裡的小朋友們派了紅包…嗯,忙碌的五月最終過去了,做畢設,寫論文,拍畢業照,答辯,辭職。各種各樣的事,也算忙完了,好吧。小豬如今又在一家新的公司上班了。第三間公司了。你們肯定會認為小豬三心二意是吧,畢竟才差點兒相同畢業就換了那麼多家公司,然後可能問我。”小豬你什麼時候跳第四間公司”,哈哈,應該不會了哈,怎麼說呢,事實上我還是非常專一的,畢竟我才剛畢業。我還臨時不須要去養家糊口。贍養老人,並且我沒女朋友。哈哈~所以趁著年輕,選擇適合自己的生長的土壤。學多點本事,工資事實上沒什麼,真的,能學到東西才是關鍵,等真正有本事了。那個時候就能夠談工資了,比方我這個公司的大牛(只是這周已跳槽到魅族了)。第一次感覺到大牛的氣息,B格真心高。自愧不如,人家自己寫組件。推送,各種代碼封裝。各種設計模式,並且會服務端,測試。IOS…有點看小說裡。一個剛入門的小學徒看到一個宗師層級的高手時那種感覺,以前。小豬自卑了幾天,一直在想,我真的能接手他的項目嗎?或者說看懂他代碼?又或者我是否能寫出這樣的代碼?那幾天,整個人都非常浮躁。各種負面情緒,連代碼都看不進去;後來不經意看到了一個講設計的TED演講,標題是:《怎樣成為一名優秀的設計師:羅子雄》,這個雖然不是說編程的,可是事實上非常多東西都是相通的。分為兩個階段:入門&准專業級,”你們希望你們希望成為一名設計師。但不止如此,你們希望成為的是一名優秀的設計師。但沒有人生下來就是優秀的,沒有人生下來就是牛逼的,沒有人生下來就會UI設計。會平面設計。會網頁設計。”。從入門到准專業級,我們須要多少經驗?”格拉德威爾在《異類》一書中指出:“人們眼中的天才。並不是卓越非凡,而是付出了持續不斷的努力,一萬小時的錘鍊是不論什麼人從平庸變成超凡的必要條件。

”一萬小時。也就是說你每天工作8小時的時間,每周工作5天,你須要5年。你無需天才,無需智商過人,無需三頭六臂,無需頭上長角,你僅僅須要持續的、堅持的努力,有正確的方法,就能夠在設計領域,一個專業中獨當一面。”看完,整個人就闊讓開朗了,心也就靜下來了,對啊,人家做多久,我做多久了?人家做五年了,我僅僅是個剛畢業的實習生,不會非常正常啊,非常多東西,急不來。每天有規劃。一步一個腳印,日積月累。堅持5年。或者不用。我也能成為一個準專業級的大牛是吧,所以何必自卑呢~恩呢,心靈雞湯的東西就講這麼多吧。喝多了酒沒作用了,視頻還是不錯的,有興趣能夠看看哈,好了,從今天開始小豬會在學習公司項目的同一時候總結相關的一些東西,然後分享給大家,第一個章節解說的是Android中的Http通訊,先敘述下Http相關的一些概念,然後講下Android上發送Http請求的兩種方式:HttpUrlConnection與HttpClient,然後使用retrofit架構封裝我們的HTTP請求,最後用RxJava實現響應式編程,實現網路的非同步請求調用。當然小豬也是在學習其中。假設有什麼寫得不正確的地方。歡迎指出,萬分感激~

本文: 1.Http是什麼鬼? ①名詞解析:
  • hypertext transfer protocol(超文字傳輸通訊協定 (HTTP)),TCP/IP協議的一個應用程式層協議,用於定義WEB瀏覽器與WEBserver之間交換資料的過程。

    client連上webserver後,若想獲得webserver中的某個web資源,需遵守一定的通訊格式,HTTP協議用於定義client與webserver通迅的格式。

②Http 1.0 與 Http 1.1的差別:
  • 1.0協議。client與webserver建立串連後,僅僅能獲得一個web資源!
  • 1.1協議,同意client與webserver建立串連後,在一個串連上擷取多個web資源!

PS:如今大部分的都是用的Http 1.1協議的~

③Http請求的工作流程:

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

  • SYN(synchronous):TCP/IP建立串連時使用的握手訊號
  • ACK(Acknowledgement):確認字元。確認發來的資料已經接受無誤

接著說下TCP/IP三向交握的概念:

  1. client發送syn包(syn = j)到server,進入SYN_SEND狀態,然後等待server確認
  2. server收到syn包,確認客戶的syn(ack = j + 1),同一時候在自己也發送一個SYN包(syn=k),
    即SYN + ACK包,server進入SYN_RECV狀態
  3. client收到SYN + ACK包,想server發送確認包ACK(ack = k +1),發送完畢後,client與服務端
    進入ESTABLISHED狀態。完畢三向交握,然後兩者開始傳送資料

假設你認為複雜的話,看圖想想你就有個大概印象了,三向交握例如以下:

Http操作的流程:

  1. 使用者點擊瀏覽器上的url(超連結)。Web瀏覽器與Webserver建立串連
  2. 建立串連後。client發送請求給server,請求的格式為:
    統一資源識別項(URL)+協議版本(通常是1.1)+MIME資訊(多個訊息頭)+一個空行
  3. 服務端受到請求後。給予對應的返回資訊,返回格式為:
    協議版本 + 狀態行(處理結果) + 多個資訊頭 + 空行 + 實體內容(比方返回的HTML)
  4. client接收服務端返回資訊,通過瀏覽器顯示出來,然後與服務端中斷連線;當然假設中途某步錯誤發生的話,錯誤資訊會返回到client,並顯示,比方:經典的404錯誤

好吧,No pic you say a jb,有圖有真相,以下我們用HttpWatch來抓下包(當然,你也能夠直接用Chrome f12),這裡測試的網站是小豬學校的教務系統:輸入帳號password後,發送登陸請求,相關資訊頭。至於相關的資訊頭,我們下節再具體解說~:

HTTP請求包含的內容:

HTTP響應包含的內容:

④Http請求的幾種方式:

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

  • Get:請求擷取Request-URI所標識的資源
  • POST:在Request-URI所標識的資源後附加新的資料
  • HEAD 請求擷取由Request-URI所標識的資源的響應資訊前序
  • PUT:請求server儲存一個資源,並用Request-URI作為其標識
  • DELETE:請求server刪除Request-URI所標識的資源
  • TRACE:請求server回送收到的請求資訊,主要用於測試或診斷
  • CONNECT:保留將來使用
  • OPTIONS:請求查詢server的效能。或者查詢與資源相關的選項

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

  • GET:在請求的URL地址後以?的形式帶上交給server的資料。多個資料之間以&進行分隔,但資料容量通常不能超過2K,比方:http://xxx?

    username=…&pawd=…這樣的就是GET

  • POST: 這個則能夠在請求的實體內容中向server發送資料,傳輸沒有數量限制
  • 另外要說一點,這兩個玩意都是發送資料的,僅僅是發送機制不一樣,不要相信網上說的”GET獲得server資料,POST向server發送資料”!!
    另外GET安全性非常低。Post安全性較高,可是運行效率卻比Post方法好,一般查詢的時候我們用GET。資料增刪改的時候用POST。!
⑤Http狀態代碼合集:
  1. 100~199 : 成功接受請求,client需提交下一次請求才幹完畢整個處理過程
  2. 200: OK,client請求成功
  3. 300~399:請求資源已移到新的地址(302,307,304)
  4. 401:請求未授權。改狀態碼需與WWW-Authenticate前序域一起使用
  5. 403:Forbidden。server收到請求,可是拒絕提供服務
  6. 404:Not Found,請求資源不存在,這個就不用說啦
  7. 500:Internal Server Error。server發生不可預期的錯誤
  8. 503:Server Unavailable。server當前不能處理client請求。一段時間後可能恢複正常
⑥Http協議的特點

好吧。這些東西知道就能夠了,小豬就不自己慢慢扣了,直接複製粘貼哈~

  1. 支援客戶/server模式。
  2. 簡單高速:客戶向server請求服務時。僅僅需傳送要求方法和路徑。要求方法經常使用的有GET、HEAD、POST。每種方法規定了客戶與server聯絡的類型不同。

    由於HTTP協議簡單,使得HTTPserver的程式規模小,因而通訊速度非常快。

  3. 靈活:HTTP同意傳輸隨意類型的資料對象。正在傳輸的類型由Content-Type加以標記。

  4. 無串連:不需連線的含義是限制每次串連僅僅處理一個請求。server處理完客戶的請求,並收到客戶的應答後。即中斷連線。採用這樣的方式能夠節省傳輸時間。
    5.無狀態:HTTP協議是無狀態協議。

    無狀態是指協議對於交易處理沒有記憶能力。

    缺少狀態意味著假設興許處理須要前面的資訊,則它必須重傳。這樣可能導致每 次串連傳送的資料量增大。還有一方面。在server不須要先前資訊時它的應答就較快。

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

恩,這個我們知道就能夠了,興許有須要的話再深入瞭解,我們的HTTP請求是出於第七層:應用程式層的,
大家知道就能夠了,另外最好記下這七層,對了,一到三層是用於建立兩個網路裝置間的物理串連的。
而四到七層主要負責互通性,背熟就好,面試說不定問下呢,是吧。哈哈~

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

另外小豬查相關資料的時候,發現一個B格更高的總結圖,有興趣的能夠慢慢研究:

貼下原文連結,想刨根問底的能夠看下:

OSI七層模型具體解釋

總結:

好吧,由於時間比較倉促,畢竟僅僅能下班的時候寫寫,可能有點亂,望體諒,有時間會又一次捋一捋思路。部分內容參考的慕課網的”Android HTTP通訊“視頻的 內容,有興趣能夠去慕課看看。恩。最後總結下本節的東東吧:

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

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

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

與各位攻城獅們共勉~加油

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.