Android應用層(網絡編程)一

注:本系列屬於學習筆記,學習內容主要來自於劉望舒的博客,特此聲明

1.Http簡介

HTTP是一個屬於應用層的面向對象的協議,由於其簡捷、快速的方式,適用於分佈式超媒體信息系統。它於1990年提出,經過幾年的使用與發展,得到不斷地完善和擴展

HTTP協議的主要特點

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

HTTP URL 格式

http://host[":"port][abs_path]
  • http表示要通過HTTP協議來定位網絡資源
  • host表示合法的Internet主機域名或者IP地址
  • port指定一個端口號,爲空則使用默認端口80
  • abs_path指定請求資源的URI(Web上任意的可用資源)

HTTP的請求報文

  • 報文的一般格式:

報文的一般格式

通常來說一個HTTP請求報文由請求行請求報頭空行、和**請求數據**4個部分組成。

請求行

Method Request-URI HTTP-Version CRLF
  • Method表示請求方法
  • Request-URI是一個統一資源標識符
  • HTTP-Version表示請求的HTTP協議版本
  • CRLF表示回車和換行(除了作爲結尾的CRLF外,不允許出現單獨的CR或LF字符)

HTTP請求方法有8種,分別是GET、POST、DELETE、PUT、HEAD、TRACE、CONNECT 、OPTIONS。
其中PUT、DELETE、POST、GET分別對應着增刪改查,對於移動開發最常用的就是POST和GET了。

  • GET:請求獲取Request-URI所標識的資源
  • POST:在Request-URI所標識的資源後附加新的數據
  • HEAD:請求獲取由Request-URI所標識的資源的響應消息報頭
  • PUT: 請求服務器存儲一個資源,並用Request-URI作爲其標識
  • DELETE :請求服務器刪除Request-URI所標識的資源
  • TRACE : 請求服務器回送收到的請求信息,主要用於測試或診斷
  • CONNECT: HTTP/1.1協議中預留給能夠將連接改爲管道方式的代理服務器。
  • OPTIONS :請求查詢服務器的性能,或者查詢與資源相關的選項和需求

請求報頭

在請求行之後會有0個或者多個請求報頭,每個請求報頭都包含一個名字和一個值,它們之間用“:”分割。請求頭部會以一個空行,發送回車符和換行符,通知服務器以下不會有請求頭。關於請求報頭,會在後面的消息報頭一節做統一的解釋。

請求數據

請求數據不在GET方法中使用,而是在POST方法中使用。POST方法適用於需要客戶填寫表單的場合,與請求數據相關的最常用的請求頭是Content-Type和Content-Length。

HTTP的響應報文

響應報文的一般格式

響應報文的一般格式

HTTP的響應報文由狀態行、消息報頭、空行、響應正文組成。響應報頭後面會講到,響應正文是服務器返回的資源的內容,先來看看狀態行。

狀態行

HTTP-Version Status-Code Reason-Phrase CRLF
  • HTTP-Version表示服務器HTTP協議的版本
  • Status-Code表示服務器發回的響應狀態代碼
  • Reason-Phrase表示狀態代碼的文本描述

狀態代碼有三位數字組成,第一個數字定義了響應的類別,且有五種可能取值:

  • 100~199:指示信息,表示請求已接收,繼續處理
  • 200~299:請求成功,表示請求已被成功接收、理解、接受
  • 300~399:重定向,要完成請求必須進行更進一步的操作
  • 400~499:客戶端錯誤,請求有語法錯誤或請求無法實現
  • 500~599:服務器端錯誤,服務器未能實現合法的請求

常見的狀態碼如下:

  • 200 OK:客戶端請求成功
  • 400 Bad Request:客戶端請求有語法錯誤,不能被服務器所理解
  • 401 Unauthorized:請求未經授權,這個狀態代碼必須和WWW-Authenticate報頭域一起使用
  • 403 Forbidden:服務器收到請求,但是拒絕提供服務
  • 500 Internal Server Error:服務器發生不可預期的錯誤
  • 503 Server Unavailable:服務器當前不能處理客戶端的請求,一段時間後可能恢復正常

HTTP的消息報頭

通用報頭

既可以出現在請求報頭,也可以出現在響應報頭中

  • Date:表示消息產生的日期和時間
  • Connection:允許發送指定連接的選項,例如指定連接是連續的,或者指定“close”選項,通知服務器,在響應完成後,關閉連接
  • Cache-Control:用於指定緩存指令,緩存指令是單向的(響應中出現的緩存指令在請求中未必會出現),且是獨立的(一個消息的緩存指令不會影響另一個消息處理的緩存機制)

請求報頭

通知服務器關於客戶端求求的信息,典型的請求頭有:

  • Host:請求的主機名,允許多個域名同處一個IP地址,即虛擬主機
  • User-Agent:發送請求的瀏覽器類型、操作系統等信息
  • Accept:客戶端可識別的內容類型列表,用於指定客戶端接收那些類型的信息
  • Accept-Encoding:客戶端可識別的數據編碼
  • Accept-Language:表示瀏覽器所支持的語言類型
  • Connection:允許客戶端和服務器指定與請求/響應連接有關的選項,例如這是爲Keep-Alive則表示保持連接。
  • Transfer-Encoding:告知接收端爲了保證報文的可靠傳輸,對報文采用了什麼編碼方式。

響應報頭

用於服務器傳遞自身信息的響應,常見的響應報頭:

  • Location:用於重定向接受者到一個新的位置,常用在更換域名的時候
  • Server:包含可服務器用來處理請求的系統信息,與User-Agent請求報頭是相對應的

實體報頭

實體報頭用來定於被傳送資源的信息,既可以用於請求也可用於響應。請求和響應消息都可以傳送一個實體,常見的實體報頭爲:

  • Content-Type:發送給接收者的實體正文的媒體類型
  • Content-Lenght:實體正文的長度
  • Content-Language:描述資源所用的自然語言,沒有設置則該選項則認爲實體內容將提供給所有的語言閱讀
  • Content-Encoding:實體報頭被用作媒體類型的修飾符,它的值指示了已經被應用到實體正文的附加內容的編碼,因而要獲得Content-Type報頭域中所引用的媒體類型,必須採用相應的解碼機制。
  • Last-Modified:實體報頭用於指示資源的最後修改日期和時間
  • Expires:實體報頭給出響應過期的日期和時間

應用學習

Android利用Fiddler進行網絡數據抓包

發佈了34 篇原創文章 · 獲贊 5 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章