HTTP協議
HTTP協議簡介
HTTP協議,中文名為超文本傳輸協議,是互聯網最常用的網絡協議,www服務是主要應用。
www,也叫web,中文名"萬維網",默認的http協議的www服務端口為80,加密的www服務https的默認端口為443,主要用於網銀,支付等機密業務。
HTTP協議版本
HTTP協議從誕生之初到現在已經經歷多個版本,現在主要版本為htpp/1.1以上。
-
HTPP/1.0簡介
HTTP/1.0是第一個得到廣泛使用的HTTP版本。 HTTP/1.0在HTTP/0.9的基礎上增加了HTTP請求頭, 可支持更多的請求方法, 並且能對多媒體對象進行處理。 HTTP/1.0使得包含生動圖片的Web頁面和交互式表格成為可能, 而正是這些頁面和表格促使互聯網被人們廣泛地接受。 HTTP/1.0規定瀏覽器與服務器只保持短暫的連接, 瀏覽器的每次請求都需要與服務器建立一個TCP連接, 服務器完成請求處理后即斷開TCP連接, 服務器不跟蹤每個客戶, 也不記錄過去的請求 。
-
HTTP/1.1簡介
TTP/1.1的重點是修復HTTP設計中的缺陷, 從可擴展性、 緩存處理、 帶寬優化、 持久連接、host頭、 錯誤通知、 消息傳遞、 內容協商等多個方面都做了相關改進。 HTTP/1.1是當前互聯網主流的HTTP版本。
在連接方面,HTTP/1.1支持持久連接,在一個TCP連接上可以傳送多個HTTP請求和響應, 減少了建立和關閉連接的消耗和時間延遲。
在請求頭方面,HTTP/I.I增加了更多的請求頭和響應頭信息, 用以增強HTTP功能。 例如:host主機頭功能, 可以讓Web瀏覽器使用主機頭名來明確表示要訪問服務器上的哪個Web站點, 這樣就可以使用Web服務器在同一個IP地址和 端口號上配置多個虛擬Web站點。
HTTP/1.1的持久連接, 也需要增加新的請求頭來幫助實現, 例如,Connection on請求頭的值為Keep-Alive時,表示客戶端通知服務器返回本次請求結果后保持連接;Connection on請求頭的值為close時,表示客戶端通知服務器返回本次請求結果后關閉連接。 HTTP/1.1還提供了與身份認證、 狀態管理和 Cache緩存等機制相關的請求頭和響應頭等 。
HTTP請求方法
在HTTP通信中, 每個HTTP請求報文都包含一個方法 。 用以告訴Web服務器端需要執行哪些具體的動作, 這些動作包括:獲取指定Web頁面、 提交內容到服務器 、刪除服務器上資源文件等, 這些HTTP請求報文中包含的方法 被稱為HTTP請求方法。 其中, 常用的HTTP請求方法見表4-1。
HTTP狀態碼
-
HTTP狀態碼介紹
HTTP狀態碼是用來表示web服務器響應HTTP請求狀態的數字代碼。每當web客戶端向web服務器發送一個HTTP請求時,web服務器都會返回一個狀態響應代碼。這個代碼是一個三位數代碼,作用是告知web客戶端此次請求是否成功,或者是否采取其它的動作方式。
-
HTTP狀態碼的命令行查看
可以通過curl命令在linux命令行查看HTTP響應的數字狀態碼,命令如下
HTTP報文
HTTP報文中有很多內容,這些行的字段都是由一些ASCII碼串組成,但各個字段的長度是不同。HTTP報文可分為兩種,一種是從web客戶端發往web服務器的HTTP報文,稱為請求報文。另外一種是從web服務器發往web客戶端的報文,成為響應報文,HTTP的請求和響應報文的格式相似。
-
HTTP請求報文介紹
HTTP請求報文由請求行,請求頭部,空行和請求報文主體幾個部分組成,如下表:
-
請求行
請求行是請求報文的第一行,用來說明客戶端想要做什么。內容由請求方法字段,URL字段和HTTP協議版本字段組成,它們之間用空格分隔。下面以GET/index.html,HTTP/1.1為例來說明請求報文的起始請求行信息詳情。
-
請求頭部
請求頭部由關鍵字/值組成,每行一對,關鍵字和值用英文冒號":"分隔。請求頭部的作用是通過客戶端把請求的相關信息告訴給服務器,如下表:
與請求報文相關的最常用的請求頭是content-type和content-length。
-
空行
最后一個請求頭部信息之后是一個空行, 通過發送回車符和換行符, 通知Web服 務器空行以下不會有請求頭部的信息了。
-
請求報文主體
請求報文主體中包括了要發送給 Web 服務器的數據信息。 請求報文主體不會應用於 HTTP 的 GET 命令方法, 而是應用於 POST 方法。 POST 方法適用於需要客戶填寫表單的場合。 請求報文的主體信息此處就不再舉例了。
-
-
HTTP響應報文介紹(Response Message)
HTTP響應報文由起始行,響應頭部header,空行,響應報文主體,這幾個組成,和Http請求報文格式。如下表
-
起始行
響應報文的起始行也叫狀態行,用來說明服務器響應客戶端請求的狀況。一般為協議版本號,數字狀態碼,狀態情況。例如:HTTP/1.1 200 OK
-
響應頭部
和請求報文類似, 起始行的后面一般有若干個頭部字段。 每個頭部字段都包含一個名字和一個值, 兩者之間用冒號分隔。 頭部結尾也是以一個空行結束的。常見的頭部信息有:
-
空行
最后一個響應頭部信息之后是一個空行,通過發送回車符和換行符,通知客戶端空行下文無頭部信息了。
-
響應報文主體
響應報文主體中裝載了要返回給客戶端的數據,這些數據可以是文本,也可以是二進制的圖片視頻,下面是響應報文主體的html格式文本數據示例。
-
-
一個簡單的請求報文和應答報文示例
如下圖為HTTP報文請求應答流程圖,從該圖示例中可以看到,web客戶端發送了一條HTTP請求報文,請求資源http://www.etiantian.org/index.html,請求報文的起始行中有一個get命令,資源名稱為/index.html是,使用的是HTTP/1.1協議,由於請求的方法為get,因此請求報文不需要有主體,因為從服務器上獲取get一個簡單的頁面不要在請求報文的主體中發送請求數據。
Web 服務器接受到請求后, 返回 一條HTTP 響應報文。 這條響應報文中包含了HTTP 的版本號( HTTP/1. 1)、 成功的狀態碼( 200)、 狀態描述( OK), 以及若干響應頭部字段, 在所有這些內容之后跟着包含了所請求資源的響應主體。 Content-Length 首部說明了響應主體的長度, Content-Type 首部說明了文檔的 MIME 類型。
HTTP協議原理及重點分析
HTTP協議屬於 OSI 模型中的第七層應用層協議, HTTP協議的重要應用就是WWW 服務應用, 下面就以 WWW 服務應用為例介紹 HTTP協議的通信原理。 以 HTTP協議進行通信時, 需要有客戶端(即終端用戶)和服務器端(即 Web 服務器), 在 Web客戶端向 Web 服務器發送請求報文之前, 先要通過 TCP/IP協議在 Web 客戶端和服務器之間建立一個 TCP/IP 連接。 整個HTTP協議請求的工作流程如下:
-
終端客戶在 Web 瀏覽器地址欄輸入訪問地址 http://www.etiantian.org/index.html
-
2) Web 瀏覽器請求 DNS 服務器把域名 www.etiantian.org 轉換成 Web 服務器的 IP
-
3) Web 瀏覽器將端口號(默認是 80)從訪問地址(URL) 中解析出來。
-
4 )Web 瀏覽器通過解析后的 IP 地址及端口號與 Web 服務器之間建立一條TCP 連接。
-
5 )建立 TCP 連接后 , Web 瀏覽器向 Web 服務器發送一條HTTP 請求報文,
-
6) Web 服務器響應並讀取瀏覽器的請求信息, 然后返回一條HTTP 響應報文
-
7) Web 服務器關閉 HTTP 連接, 關閉 TCP 連接, Web 瀏覽器顯示訪問的網站內容顯示到屏幕上。
上述就是HTTP協議通信過程, 整個通信原理的重要知識點有:
-
用戶訪問網站的流程。
-
DNS 解析流程細節。
-
建立 TCP 連接發送HTTP 報文的過程。
-
HTTP 請求報文的細節。
-
HTTP 響應報文的細節。
-
Web 服務器請求后端集群的細節
面試的時候需要將以上幾點講清楚。
這里對重要知識點進行匯總 , 如下:
-
HTTP協議位於 OSI 模型中第 7層應用層。
-
HTTP協議的重要應用是WWW 服務。
-
用戶上網流程、 DNS 解析流程。
-
DNS 解析獲取到IP后, 建立 TCP 連接, 然后發送 HTTP 請求的細節和服務器響應細節。
-
HTTP 請求報文與 HTTP響應報文知識。
-
到達 HTTP 服務后, 請求后端集群節點的流程為 Nginx → FastCGI →PHP→(數據庫,存儲等)
HTTP資源
媒體類型
互聯網上的數據有很多不同的類型, Web 服務器會把通過 Web 傳輸的每個對象都打上 MIME類型(即MIME type)的數據格式標簽。 最初設計 MIME ( Multipurpose Internet Mail Extension , 多用途因特網郵件擴展) 是為了解決在不同的電子郵件系統之間搬移報文時存在的問題。 MIME 在電子郵件系統中工作得非常好, 后來, HTTP 也支持了這個功能, 用它來描述數據並標記不同的數據內容類型。
當 Web 服務器響應 HTTP 請求時, 會為每一個 HTTP 對象數據加一個 MIME類型。 當 Web 瀏覽器獲取到服務器返回的對象時, 會去查看相關的 MIME類型, 並進行相應處理。
MIME類型存在於 HTTP 響應報文的響應頭部信息里, 它是一種文本標記 ,表示一 種主要的對象類型和一個特定的子類型, 中間由一條斜杠來分隔。 表 4-8 為生產場景最常見的 MIME 類型。
URL介紹
URL,全稱為UniformResource Location ,中文翻譯為統一資源定位符,也被稱為 網頁地址(網址)。如同門牌一樣,它是因特網上標准的資源唯一地址。通俗地說,URL 是Internet上用來描述信息資源的字符串,主要用在各種WWW客戶端和服務器程序上。URL可以用一種統一的格式來描述各種信息資源,包括文件、服務器的地址和目錄等。嚴格來講,每個URL都是一個URI,它標識一個互聯網資源,並指定對其進行操作或取得該資源的方法。
URL 的格式由下列三部分組成:
第一部分是協議, 例如:h即。
第二部分是主機資源服務器IP地址或域名(端口號), 例如: www.etiantian.org。 第三部分是主機資源的具體地址, 如目錄和文件名等 , 例如:oldboy/index.html。 第一部分和第二部分之間用 " :// " 符號隔開, 第二部分和第三部分用 " / " 符號隔開。 第一部分和第二部分是不可缺少的, 第三部分可以省略。 表4-9列舉了一個標准的 URL及說明。
URI介紹
URI,全稱為UniformResource Identifier,中文翻譯為統一資源標識符,是一個用於標識某一互聯網資源名稱的字符串。這個字符串在世界范圍內唯一標識並定位某一個 信息資源。互聯網上每個可用的數據資源(如HTML、圖片、視頻等)皆通過統一資源標識符進行定位。表4-10給出了網站URI(URL是URI的子集)說明;表4-門給出了指向一個用戶郵箱的URI。