一、概要
- HTTP協議的主要特色
- HTTP報文的組成部分
- HTTP方法
- POST和GET的區別
- HTTP狀態碼
- 持久鏈接
- 管線化
二、HTTP協議的主要特色
概念: http(超文本傳輸協議)是一個基於請求與響應模式的、無狀態的、應用層的協議,常基於TCP的鏈接方式。瀏覽器
- 客戶向服務器請求服務時,只需傳送請求方法和路徑。
- 請求方法有GET、POST、PUT、DELETE、HEAD。每種方法規定了客戶與服務器聯繫的類型不一樣。
- HTTP協議簡單,使得HTTP服務器的程序規模小,於是通訊速度很快。
- HTTP容許傳輸任意類型的數據對象。
- 正在傳輸的類型由Content-Type加以標記。
- 無鏈接的含義是限制每次鏈接只處理一個請求。
- 服務器處理完客戶的請求,並收到客戶的應答後,即斷開鏈接。
- 採用這種方式能夠節省傳輸時間。
- HTTP協議是無狀態協議。
- 無狀態是指協議對於事務處理沒有記憶能力。
- 缺乏狀態意味着若是後續處理須要前面的信息,則它必須重傳,這樣可能致使每次鏈接傳送的數據量增大。
- 另外一方面,在服務器不須要先前信息時它的應答就較快。
三、HTTP報文的組成部分
- 請求行 // http方法,路徑,http版本
- 請求頭 // key: value
- 空行 // 隔離請求頭和請求體
- 請求體 // 請求數據部分
- 狀態行 // http版本 http狀態碼
- 響應頭 // key: value
- 空行 // 隔離響應頭和響應體
- 響應體 // 響應數據
四、HTTP方法
- GET ------ 獲取資源
- POST ------ 傳輸資源
- PUT ------ 更新資源
- DELETE ------ 刪除資源
- HEAD ------ 獲取報文首部
- TRACE ------ 請求服務器回送收到的請求信息,主要用於測試或診斷
- CONNECT------ 保留未來使用
- OPTIONS------ 請求查詢服務器的性能,或者查詢與資源相關的選項和需求
五、POST和GET的區別
- get在瀏覽器回退是無害的,post會再次提交請求。
- get請求的url地址能夠被收藏,post不能。
- get會被瀏覽器主動緩存,post不會,除非手動設置。
- get請求只能進行url編碼,post支持多種編碼格式。
- get請求參數會被收藏在瀏覽器歷史記錄中,post參數不會被保留。
- get在URL中傳送的參數是有長度限制的(2kb,不一樣瀏覽器限制可能不同),post沒有限制。
- 參數的數據類型,get只接受ASCII字符,post沒有限制。
- get比post更不安全,參數直接暴露在URL地址中,全部不能用來傳遞敏感信息。
- get參數經過URL傳遞,post放在Request body中
六、HTTP狀態碼
- 1xx: 指示信息 =》 表示請求已接收,繼續處理
- 2xx: 成功 =》 表示請求已成功接收
- 3xx: 重定向 =》 要完成請求必須更進一步操做
- 4xx: 客戶端錯誤 =》 請求語法錯誤或者請求沒法實現,好比路徑錯誤,資源不存在等
- 5xx: 服務器錯誤 =》 服務器未能實現合法的請求
- 200 ok: 客戶端請求成功。
- 206 Partail Content: 客戶發生了一個帶有Range頭的get請求,服務器完成了它(一般在請求大的視頻或音頻時可能出現)。
- 301 Moved Permanently: 請求的頁面已經轉移至新的url地址。
- 302 Found: 請求的頁面已經臨時轉移至新的url地址。
- 304 Not Modified: 客戶端有緩存的文檔併發送了一個有條件的請求,服務器告訴客戶端原來的緩存文檔該能夠繼續使用。
- 400 Bad Request: 客戶端語法錯誤。
- 401 Unauthorized: 請求未經受權,這個狀態碼必須和WWW-Authenticate報頭域一塊兒使用。
- 403 Forbidden: 頁面禁止被訪問
- 404 Not Found: 請求資源不存在。
- 500 Internal Sever Error: 服務器發生不可預期的錯誤,原來緩存的文檔還能夠繼續被使用。
- 503 Server Unavaliable: 請求未完成,服務器臨時過載或當機,一段時間後可能恢復正常。
七、持久鏈接
- 使用'Keep-Alive'模式,http1.1版本才支持,1.0版本不支持。Keep-Alive模式是客戶端到服務端的鏈接持續後效,後續繼續請求時不用再創建或從新創建鏈接。
八、管線化
- 持久鏈接下 請求1 => 響應1 => 請求2 => 響應2 => 請求3 => 響應3
- 管線化(在持久鏈接前提下) 請求1 => 請求2 => 請求3 => 響應1 => 響應2 => 響應3
- 經過持久鏈接機制完成。
- 只有HTTP/1.1支持。
- 只有GET和HEAD請求能夠進行管線化,post有限制。
- 初次鏈接不要啓動管線機制,服務器可能不支持HTTP/1.1。
- 管線化不會影響響應到來的順序。
- 有HTTP/1.1要求服務器支持管線化,但並不求服務器要對響應進行管線化處理,只要請求不失敗便可。
- 因爲不少服務器對管線化支持不友好,如今瀏覽器Chrome、Firefox等默認未開啓管線化。
九、總結