上篇文章介紹了傳輸層TCP協議的理論知識,本文主要介紹了TCP協議基礎之上HTTP協議和HTTPS協議的理論知識。html
HTTP協議基於TCP協議定義了客戶端向服務器請求數據的方式,它是面向事務的應用層協議具備靈活、簡單快速、無鏈接和無狀態的特色,是網絡中交換各種數據的基礎。瀏覽器
HTTP報文的格式以下所示:安全
咱們能夠看出,HTTP協議的報文主要分爲報文首部和報文主體兩部分,中間用空行隔開。下面讓咱們詳細介紹一下請求報文和響應報文:服務器
請求報文由三部分組成:請求行,請求報頭,報文主體(請求數據)。以下圖所示cookie
請求行中包括了請求方法、URI、協議版本三部分信息。網絡
其中請求方法包括如下八種,經常使用的是GET和POST:併發
請求的URI標識了請求資源的位置,而協議版本主要有HTTP/1.0和HTTP/1.1兩個版本。post
請求報頭中包含了有關請求的各類信息,例如性能
User-Agent:產生請求的瀏覽器類型。
Accept:客戶端可識別的內容類型列表。
Host: 請求的主機名,容許多個域名同處一個IP地址,即虛擬主機。 測試
報文主體中存放了請求的數據,主要是在post方法中使用,適用於提交表單等場合。
響應報文也由三部分構成:狀態行,響應報頭,報文主體,以下圖所示:
狀態行中包括HTTP協議版本,響應狀態碼以及狀態碼的文本描述。其中狀態碼有五類:
1xx:指示信息--表示請求已接收,繼續處理
2xx:成功--表示請求已被成功接收、理解、接受
3xx:重定向--要完成請求必須進行更進一步的操做
4xx:客戶端錯誤--請求有語法錯誤或請求沒法實現
5xx:服務器端錯誤--服務器未能實現合法的請求
響應報頭中包含了有關響應的各類信息。在報文主體中包含了須要傳輸的響應數據,例如HTML,二進制的數據等等。
介紹完了HTTP協議的請求與響應報文,下面以瀏覽器請求HTML頁面爲例,咱們看一下HTTP客戶端與服務器之間的交互過程:
HTTP使用了TCP協議保證了可靠傳輸,但其自己是無鏈接的,也就是說雙方在發送報文以前無需創建鏈接。同時,HTTP協議也是無狀態的,服務器不保存客戶端信息,更容易支持大量併發的HTTP請求。在HTTP1.0中,每次請求一個鏈接對象,都要發起一次鏈接,這樣會致使請求很低效。在HTTP1.1中,使用了持續鏈接,也就是說服務器在響應客戶端請求後在一段時間內保持鏈接,這樣客戶端與服務器之間在一段時間內能夠持續保持着條鏈接。HTTP1.1協議持續鏈接有兩種工做方式:
上面提到HTTP協議是無狀態的,不管客戶端仍是服務端都不記錄HTTP相關信息。可是能夠經過cookie來保存客戶端和服務端保存信息,機制以下:
cookie是一種很小的文本文件,用於在客戶端保存由服務器肯定的內容,請求報文會自動添加cookie中的內容。
HTTP協議在傳輸過程當中採用明文,而且無認證和完整性驗證。而HTTPS就是使用了SSL協議的HTTP協議,雖然犧牲了速度,可是保證了數據的安全性,適用於金融支付環境。
總結完HTTP協議的知識,下一篇文章將會介紹在Android開發中會用到的HttpClient和UrlConnection庫。