Android網絡編程隨想錄(2)

        上篇文章介紹了傳輸層TCP協議的理論知識,本文主要介紹了TCP協議基礎之上HTTP協議和HTTPS協議的理論知識。html

        HTTP協議基於TCP協議定義了客戶端向服務器請求數據的方式,它是面向事務的應用層協議具備靈活、簡單快速、無鏈接和無狀態的特色,是網絡中交換各種數據的基礎。瀏覽器

HTTP協議的請求與響應報文

        HTTP報文的格式以下所示:安全

image

        咱們能夠看出,HTTP協議的報文主要分爲報文首部和報文主體兩部分,中間用空行隔開。下面讓咱們詳細介紹一下請求報文和響應報文:服務器

    請求報文

        請求報文由三部分組成:請求行,請求報頭,報文主體(請求數據)。以下圖所示cookie

        請求行中包括了請求方法、URI、協議版本三部分信息。網絡

        其中請求方法包括如下八種,經常使用的是GET和POST:併發

    1. GET     請求獲取Request-URI所標識的資源
    2. POST    在Request-URI所標識的資源後附加新的數據
    3. HEAD    請求獲取由Request-URI所標識的資源的響應消息報頭
    4. PUT     請求服務器存儲一個資源,並用Request-URI做爲其標識
    5. DELETE  請求服務器刪除Request-URI所標識的資源
    6. TRACE   請求服務器回送收到的請求信息,主要用於測試或診斷
    7. CONNECT 保留未來使用
    8. OPTIONS 請求查詢服務器的性能,或者查詢與資源相關的選項和需求

        請求的URI標識了請求資源的位置,而協議版本主要有HTTP/1.0和HTTP/1.1兩個版本。post

        請求報頭中包含了有關請求的各類信息,例如性能

User-Agent:產生請求的瀏覽器類型。
Accept:客戶端可識別的內容類型列表。
Host: 請求的主機名,容許多個域名同處一個IP地址,即虛擬主機。
測試

        報文主體中存放了請求的數據,主要是在post方法中使用,適用於提交表單等場合。

    響應報文

        響應報文也由三部分構成:狀態行,響應報頭,報文主體,以下圖所示:

        狀態行中包括HTTP協議版本,響應狀態碼以及狀態碼的文本描述。其中狀態碼有五類:

1xx:指示信息--表示請求已接收,繼續處理
2xx:成功--表示請求已被成功接收、理解、接受
3xx:重定向--要完成請求必須進行更進一步的操做
4xx:客戶端錯誤--請求有語法錯誤或請求沒法實現
5xx:服務器端錯誤--服務器未能實現合法的請求

        響應報頭中包含了有關響應的各類信息。在報文主體中包含了須要傳輸的響應數據,例如HTML,二進制的數據等等。

 

        介紹完了HTTP協議的請求與響應報文,下面以瀏覽器請求HTML頁面爲例,咱們看一下HTTP客戶端與服務器之間的交互過程:

    1. 客戶端瀏覽器分析URL,向DNS請求解析地址
    2. 域名系統DNS解析出服務器的IP地址返回給客戶端
    3. 客戶端與服務器創建TCP鏈接併發送GET請求報文
    4. 服務器給出響應,把相應html文件發送給客戶端瀏覽器
    5. 釋放TCP鏈接
    6. 瀏覽器顯示HTML文件

        HTTP使用了TCP協議保證了可靠傳輸,但其自己是無鏈接的,也就是說雙方在發送報文以前無需創建鏈接。同時,HTTP協議也是無狀態的,服務器不保存客戶端信息,更容易支持大量併發的HTTP請求。在HTTP1.0中,每次請求一個鏈接對象,都要發起一次鏈接,這樣會致使請求很低效。在HTTP1.1中,使用了持續鏈接,也就是說服務器在響應客戶端請求後在一段時間內保持鏈接,這樣客戶端與服務器之間在一段時間內能夠持續保持着條鏈接。HTTP1.1協議持續鏈接有兩種工做方式:

    • 非流水線方式:客戶端在收到一個響應報文後才發送下一個請求。服務器在發送完一個對象後,TCP鏈接處於空閒狀態,浪費了服務器資源。
    • 流水線方式:客戶端在收到響應報文以前就能夠連續發送請求報文,提升了傳輸效率。

    cookie

        上面提到HTTP協議是無狀態的,不管客戶端仍是服務端都不記錄HTTP相關信息。可是能夠經過cookie來保存客戶端和服務端保存信息,機制以下:

        cookie是一種很小的文本文件,用於在客戶端保存由服務器肯定的內容,請求報文會自動添加cookie中的內容。

 

    HTTPS協議

        HTTP協議在傳輸過程當中採用明文,而且無認證和完整性驗證。而HTTPS就是使用了SSL協議的HTTP協議,雖然犧牲了速度,可是保證了數據的安全性,適用於金融支付環境。

 

        總結完HTTP協議的知識,下一篇文章將會介紹在Android開發中會用到的HttpClient和UrlConnection庫。

相關文章
相關標籤/搜索