標籤: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是什麼鬼?
①名詞解析:
②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三向交握的概念:
- client發送syn包(syn = j)到server,進入SYN_SEND狀態,然後等待server確認
- server收到syn包,確認客戶的syn(ack = j + 1),同一時候在自己也發送一個SYN包(syn=k),
即SYN + ACK包,server進入SYN_RECV狀態
- client收到SYN + ACK包,想server發送確認包ACK(ack = k +1),發送完畢後,client與服務端
進入ESTABLISHED狀態。完畢三向交握,然後兩者開始傳送資料
假設你認為複雜的話,看圖想想你就有個大概印象了,三向交握例如以下:
Http操作的流程:
- 使用者點擊瀏覽器上的url(超連結)。Web瀏覽器與Webserver建立串連
- 建立串連後。client發送請求給server,請求的格式為:
統一資源識別項(URL)+協議版本(通常是1.1)+MIME資訊(多個訊息頭)+一個空行
- 服務端受到請求後。給予對應的返回資訊,返回格式為:
協議版本 + 狀態行(處理結果) + 多個資訊頭 + 空行 + 實體內容(比方返回的HTML)
- 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的差別:
⑤Http狀態代碼合集:
- 100~199 : 成功接受請求,client需提交下一次請求才幹完畢整個處理過程
- 200: OK,client請求成功
- 300~399:請求資源已移到新的地址(302,307,304)
- 401:請求未授權。改狀態碼需與WWW-Authenticate前序域一起使用
- 403:Forbidden。server收到請求,可是拒絕提供服務
- 404:Not Found,請求資源不存在,這個就不用說啦
- 500:Internal Server Error。server發生不可預期的錯誤
- 503:Server Unavailable。server當前不能處理client請求。一段時間後可能恢複正常
⑥Http協議的特點
好吧。這些東西知道就能夠了,小豬就不自己慢慢扣了,直接複製粘貼哈~
- 支援客戶/server模式。
- 簡單高速:客戶向server請求服務時。僅僅需傳送要求方法和路徑。要求方法經常使用的有GET、HEAD、POST。每種方法規定了客戶與server聯絡的類型不同。
由於HTTP協議簡單,使得HTTPserver的程式規模小,因而通訊速度非常快。
- 靈活:HTTP同意傳輸隨意類型的資料對象。正在傳輸的類型由Content-Type加以標記。
- 無串連:不需連線的含義是限制每次串連僅僅處理一個請求。server處理完客戶的請求,並收到客戶的應答後。即中斷連線。採用這樣的方式能夠節省傳輸時間。
5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於交易處理沒有記憶能力。
缺少狀態意味著假設興許處理須要前面的資訊,則它必須重傳。這樣可能導致每 次串連傳送的資料量增大。還有一方面。在server不須要先前資訊時它的應答就較快。
⑦OSI七層協議&TCP四層協議;
恩,這個我們知道就能夠了,興許有須要的話再深入瞭解,我們的HTTP請求是出於第七層:應用程式層的,
大家知道就能夠了,另外最好記下這七層,對了,一到三層是用於建立兩個網路裝置間的物理串連的。
而四到七層主要負責互通性,背熟就好,面試說不定問下呢,是吧。哈哈~
OSI七層協議圖&TCP四層模型圖:
另外小豬查相關資料的時候,發現一個B格更高的總結圖,有興趣的能夠慢慢研究:
貼下原文連結,想刨根問底的能夠看下:
OSI七層模型具體解釋
總結:
好吧,由於時間比較倉促,畢竟僅僅能下班的時候寫寫,可能有點亂,望體諒,有時間會又一次捋一捋思路。部分內容參考的慕課網的”Android HTTP通訊“視頻的 內容,有興趣能夠去慕課看看。恩。最後總結下本節的東東吧:
- 介紹了下HTTP協議的一些概念、
- 簡單的說了下HTTP 1.0 和HTTP 1.1的差別
- HTTP請求的流程,包含SYN和ACK的概念,TCP/IP三向交握,HTTP操作的流程,HTTP請求的幾種幾種方式,HTTP狀態代碼合集,以及HTTP協議特點
- OSI七層協議圖&TCP四層模型圖
本節都是一些概念性的東西,瞭解瞭解就好。下一節,我們來研究不同的回應標頭。我們服務端通過設定不同的回應標頭來控制瀏覽器的一些行為,比方頁面從定向。定時重新整理。提示檔案下載等,敬請期待~好了。洗澡睡覺。明天繼續上班哼(ˉ(∞)ˉ)唧~
PS:剛舍友路過,問我一晚上在扣什嗎?寫代碼麼,我說寫博。然後他又問這能賺錢嗎?我說不能。然後他說,那寫了有個卵用…我也不知道怎麼跟他解釋,每一個人的看法。價值觀不同吧。我喜歡寫博,雖然我不是大牛,我寫出來的東西B格也沒人家高。可能都是一些基礎的東西。雖然如此,我還是願意在下班吃完飯後,埋頭碼字一個晚上,不積跬步何以千裡。持續的。堅持的努力,再加上正確的方法,小豬也有成為大牛的那一天的,另外,把摸索出來的方法寫出來,又能夠方便後來者。何樂而不為呢?是吧!
與各位攻城獅們共勉~加油
Android之Http通訊——1.初識Http協議