這篇文章算是正式開始學習的第一篇技術文章,在閱讀蒐集到的幾篇博客文章後,對 HTTP 協議的相關知識作一下總結。html
HTTP 是互聯網中最基礎的網絡協議,日常咱們上網瀏覽網頁、聽音樂、玩遊戲等行爲都離不開這個協議。對於開發者來講,在開發應用程序時,都少不了須要網絡功能。所以,瞭解 HTTP 協議是頗有必要的。編程
HTTP 協議(HyperText Transfer Protocol,超文本傳輸協議)是一個基於 TCP/IP 的應用層網絡協議,它不涉及數據包的傳輸,規定了客戶端與服務器端的通訊格式。用於從萬維網(WWW)服務器傳輸超文本到本地客戶端。HTTP 從1991年發佈0.9版開始,通過20多年的發展,不斷完善和擴展。瀏覽器
HTTP 協議的工做原理緩存
HTTP 協議是基於 C/S(客戶端/服務端)架構模型來實現的。瀏覽器做爲客戶端向Web服務器發送請求,Web服務器收到請求後,向客戶端發送響應信息。常見的Web服務器有 Apache 服務器、IIS 服務器等。服務器
HTTP 協議的特色網絡
HTTP URL 格式架構
http 表示使用 HTTP 協議來發送網絡請求;host 表示合法的 Internet 主機域名或者IP地址;port 表示端口號,HTTP 協議默認使用 80 端口,也能夠另外指定;abs_path 表示指定的 Web 服務器上可用資源的 URI。app
接下來介紹 HTTP 協議中的報文,包含兩種類型,請求報文和響應報文,分別對應客戶端向服務器發送請求以及服務器響應請求這兩個過程。curl
HTTP 請求報文的通常格式如圖所示:
請求報文包含請求行、請求報頭、空行和請求數據 4 個部分。
請求行
請求行由請求方法、URL 字段和 HTTP 協議的版本組成,如示例:
GET www.runoob.com/http/http-t… HTTP/1.1
HTTP 的請求方法共有 8 個,HTTP 協議 1.0 版本中定義了GET、POST、HEAD 這 3 個方法,1.1 版本時又新增了PUT、DELETE、TRACE、CONNECT、OPTION 這 5 個方法。其中最經常使用的是 GET 和 POST。
請求報頭(header)
請求行以後會有 0 個或多個請求報頭,若是有請求報頭,則每行有 1 個請求頭,都是以鍵值對的形式表示,包括頭部域的名字和值,中間用 「:」 分隔。
空行
協議中用空行來表示請求報頭的結束,空行以後就是請求數據。
請求數據
請求數據是客戶端向服務器發送的數據,GET 請求中沒有請求數據,出如今使用 POST 方法來向服務器提交表單等情景中。和請求數據相關的最經常使用的請求頭是 Content-Type 和 Content-Length。
如下是一個完整的請求報文實例:
GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi
HTTP 響應報文的通常格式以下圖所示:
響應報文包含狀態行、響應報頭、空行和響應正文 4 個部分。空行表示響應頭部和正文的分隔,相應正文則表示服務器返回的資源的內容,主要介紹一下狀態行和 HTTP 協議中的消息報頭(請求報頭和響應報頭都屬於它的一個分類,因此放在一塊兒介紹)。
狀態行
狀態行依次包括 HTTP 版本、狀態碼以及該狀態碼對應的緣由短語,示例以下:
HTTP/1.1 200 OK
HTTP 狀態碼由三個十進制數字組成,第一個十進制數字定義了狀態碼的類型,後兩個數字沒有分類的做用。HTTP狀態碼共分爲5種類型:
常見的HTTP狀態碼有:
消息報頭能夠分爲通用報頭、請求報頭、響應報頭和實體報頭。以鍵值對的形式存在,每行一對,名字和值之間用 「:」 來進行分隔。
通用報頭
通用報頭既能出如今請求報頭也能出如今響應報頭中。
請求報頭
請求報頭容許客戶端向服務器端傳遞請求的附加信息以及客戶端自身的信息。
常見的請求報頭有:
響應報頭
響應報頭用於服務器向客戶端發送信息。
常見的響應報頭有:
實體報頭
請求和響應消息均可以傳送一個實體。實體報頭定義了關於實體正文和請求所標識的資源的元信息。
常見的實體報頭有:
如下是一個響應報文的實例:
HTTP/1.1 304 Not Modified
Date: Thu, 12 Oct 2017 09:20:27 GMT
Via: 1.1 varnish
Cache-Control: max-age=600
Expires: Thu, 12 Oct 2017 09:02:02 GMT
Age: 0
Connection: keep-alive
X-Served-By: cache-hkg17934-HKG
X-Cache: MISS
X-Cache-Hits: 0
X-Timer: S1507800028.883579,VS0,VE164
Vary: Accept-Encoding
X-Fastly-Request-ID: 17fc09b064ce9669f38931c159ec01384cc3f8de
HTTP 協議的有關知識暫時就到這裏,大體上梳理了 HTTP 協議的總體工做流程,掌握了大部分的內容,其中的一些細節仍是沒有把握好,好比消息報頭、Content-Type 沒有深刻的去理解。(本文圖片轉載自菜鳥教程與劉望舒博客,侵刪)
下一篇文章,將是有關 Android 中 WebView 的使用。
下次見。
參考文章
學習過程當中閱讀了以下幾篇文章和教程,感謝這些做者辛勤付出。
劉望舒: Android網絡編程(一)HTTP協議原理
liuwangshu.cn/application…
Jeffrey : HTTP協議詳解
www.cnblogs.com/li0803/arch…
阮一峯: HTTP 協議入門
www.ruanyifeng.com/blog/2016/0…
菜鳥教程: HTTP 教程
www.runoob.com/http/http-t…