HTTP協議詳解

一、概要

  • HTTP協議的主要特色
  • HTTP報文的組成部分
  • HTTP方法
  • POST和GET的區別
  • HTTP狀態碼
  • 持久鏈接
  • 管線化

二、HTTP協議的主要特色

概念: http(超文本傳輸協議)是一個基於請求與響應模式的、無狀態的、應用層的協議,常基於TCP的鏈接方式。瀏覽器

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

三、HTTP報文的組成部分

  • 請求報文
  1. 請求行 // http方法,路徑,http版本
  2. 請求頭 // key: value
  3. 空行 // 隔離請求頭和請求體
  4. 請求體 // 請求數據部分
  • 響應報文
  1. 狀態行 // http版本 http狀態碼
  2. 響應頭 // key: value
  3. 空行 // 隔離響應頭和響應體
  4. 響應體 // 響應數據

四、HTTP方法

  1. GET ------ 獲取資源
  2. POST ------ 傳輸資源
  3. PUT ------ 更新資源
  4. DELETE ------ 刪除資源
  5. HEAD ------ 獲取報文首部
  6. TRACE ------ 請求服務器回送收到的請求信息,主要用於測試或診斷
  7. CONNECT------ 保留未來使用
  8. OPTIONS------ 請求查詢服務器的性能,或者查詢與資源相關的選項和需求

五、POST和GET的區別

  1. get在瀏覽器回退是無害的,post會再次提交請求。
  2. get請求的url地址能夠被收藏,post不能。
  3. get會被瀏覽器主動緩存,post不會,除非手動設置。
  4. get請求只能進行url編碼,post支持多種編碼格式。
  5. get請求參數會被收藏在瀏覽器歷史記錄中,post參數不會被保留。
  6. get在URL中傳送的參數是有長度限制的(2kb,不一樣瀏覽器限制可能不同),post沒有限制。
  7. 參數的數據類型,get只接受ASCII字符,post沒有限制。
  8. get比post更不安全,參數直接暴露在URL地址中,全部不能用來傳遞敏感信息。
  9. get參數經過URL傳遞,post放在Request body中

六、HTTP狀態碼

  • 分類
  1. 1xx: 指示信息 =》 表示請求已接收,繼續處理
  2. 2xx: 成功 =》 表示請求已成功接收
  3. 3xx: 重定向 =》 要完成請求必須更進一步操做
  4. 4xx: 客戶端錯誤 =》 請求語法錯誤或者請求沒法實現,好比路徑錯誤,資源不存在等
  5. 5xx: 服務器錯誤 =》 服務器未能實現合法的請求
  • 常見的HTTP狀態碼
  1. 200 ok: 客戶端請求成功。
  2. 206 Partail Content: 客戶發生了一個帶有Range頭的get請求,服務器完成了它(一般在請求大的視頻或音頻時可能出現)。
  3. 301 Moved Permanently: 請求的頁面已經轉移至新的url地址。
  4. 302 Found: 請求的頁面已經臨時轉移至新的url地址。
  5. 304 Not Modified: 客戶端有緩存的文檔併發送了一個有條件的請求,服務器告訴客戶端原來的緩存文檔該能夠繼續使用。
  6. 400 Bad Request: 客戶端語法錯誤。
  7. 401 Unauthorized: 請求未經受權,這個狀態碼必須和WWW-Authenticate報頭域一塊兒使用。
  8. 403 Forbidden: 頁面禁止被訪問
  9. 404 Not Found: 請求資源不存在。
  10. 500 Internal Sever Error: 服務器發生不可預期的錯誤,原來緩存的文檔還能夠繼續被使用。
  11. 503 Server Unavaliable: 請求未完成,服務器臨時過載或當機,一段時間後可能恢復正常。

七、持久鏈接

  1. 使用'Keep-Alive'模式,http1.1版本才支持,1.0版本不支持。Keep-Alive模式是客戶端到服務端的鏈接持續後效,後續繼續請求時不用再創建或從新創建鏈接。

八、管線化

  • 區別
  1. 持久鏈接下 請求1 => 響應1 => 請求2 => 響應2 => 請求3 => 響應3
  2. 管線化(在持久鏈接前提下) 請求1 => 請求2 => 請求3 => 響應1 => 響應2 => 響應3
  • 特色
  1. 經過持久鏈接機制完成。
  2. 只有HTTP/1.1支持。
  3. 只有GET和HEAD請求能夠進行管線化,post有限制。
  4. 初次鏈接不要啓動管線機制,服務器可能不支持HTTP/1.1。
  5. 管線化不會影響響應到來的順序。
  6. 有HTTP/1.1要求服務器支持管線化,但並不求服務器要對響應進行管線化處理,只要請求不失敗便可。
  7. 因爲不少服務器對管線化支持不友好,如今瀏覽器Chrome、Firefox等默認未開啓管線化。

九、總結

  • 本文主要講述了HTTP的一些概念,只要瞭解便可。
相關文章
相關標籤/搜索