HTTP 協議的主要特點
- 簡單快速:每個資源的URL是固定的
- 靈活:在每個 http 協議中都有一個頭部分有一個資料型別,通過一個 http 協議就可以完成不同資料型別的傳輸
- 無連線:連線一次就好斷掉不會保持連線
- 無狀態:客戶端和服務端是兩種身份,客戶端向服務端請求一個圖片,http 協議幫忙建立連線,中間傳輸,因為無連線,這次任務完成後這個連線就斷開了,下次客戶端再過來服務端是無法區分上次連線和這次連線是不是同一個人同一個身份,因為服務端沒有記住你的狀態,但從http協議是無法區分兩次連線的身份的,這就是無狀態的
HTTP 報文的組成部分
1、請求報文
- 請求行
- 請求頭:key, value值來告訴服務端需要哪些內容
- 空行
- 請求體
2、響應報文
- 狀態行
- 響應頭
- 空行
- 響應體
HTTP 方法
- GET ------> 獲取資源
- POST ------> 傳輸資源
- PUT ------> 更新資源
- DELETE ------> 刪除資源
- HEAD ------> 獲取報文首部
POST 和 GET 的區別
- GET在瀏覽器回退時是無害的,而POST 會再次提交
- GET產生的URL地址是可以被收藏的,而POST不可以
- GET請求會被瀏覽器主動快取,而POST不會,除非手動設定
- GET請求只能進行URL編碼,而POST支援多種編碼方式
- GET請求引數會被完整保留在瀏覽器歷史記錄裡,而POST 中的引數不會被保留
- GET請求在URL中傳送的引數是有長度限制的,而POST沒有限制
- 對引數的資料型別,GET只接受ASCI字元,而POST 沒有限制的
- GET比POST更不安全,因為引數直接暴露在URL上,所以不能用來傳遞敏感資訊
- GET引數通過URL傳遞,而POST放在Request body中
HTTP狀態碼
- 1xx:指示資訊 -- 表示請求已接收,繼續處理
- 2xx:成功 -- 表示請求已被成功接收
- 200 OK:客戶端請求成功
- 206 Partial Content:客戶傳送了一個帶有 Range 頭的GET請求,伺服器完成了它
- 3xx:重定向 -- 要完成請求必須進行更進一步的操作
- 301 Moved Permanently:所請求的頁面已經轉移至新的URL
- 302 Found:所請求的頁面已經臨時轉移至新的URL
- 304 Not Modified:客戶端與緩衝的文件併發出了一個條件性的請求,伺服器告訴客戶,原來緩衝的文件還可以繼續使用
- 4xx:客戶端錯誤 -- 請求有語法錯誤或請求無法實現
- 400 Bad Request:客戶端請求有語法錯誤,不能被伺服器所理解
- 401 Unauthoried:請求未經授權,這個狀態碼必須和WWW-Authenticate 報頭域一起使用
- 403 Forbidden:對被請求頁面的訪問被禁止
- 404 Not Found: 請求資源不存在
- 5xx:伺服器錯誤 -- 伺服器未能實現合法的請求
- 500 Internal Server Error:伺服器發生不可預期的錯誤原來緩衝的文件還可以繼續使用
- 503 Server Unavailable:請求未完成,伺服器臨時過載或當機,一段時間後可能恢復正常
什麼是持久連線
HTTP協議採用 “請求-應答”模式,當使用普通模式,即非 Keep-Alive模式時,每個請求/應答客戶和伺服器都要新建一個連線,完成之後立即斷開連線(http協議為無連線的協議)
當使用 Keep-Alive模式(又稱持久連線,連線重用)時,Keep-Alive 功能使客戶端到伺服器端的連線持續有效,當出現對伺服器的後繼請求之後,Keep-Alive功能避免了建立或者重新建立連線
版本是 1.1 才支援持久連線
HTTP 管線化