前端基礎重點回顧2: HTTP協議
HTTP協議的主要特點
- 簡單快速
URI固定,處理簡單 - 靈活
http協議可以通過修改header 指定傳輸的資料型別,一個http 傳輸可以完成不同資料型別的傳輸 - 無連線
http協議每次傳輸後連線都會斷開 - 無狀態
客戶端和服務端是兩塊,客戶端再次訪問服務端是無法區分客戶端的(單從http 協議上是無法區分客戶端身份的)
HTTP報文組成
請求報文
- 請求行
http方法、請求地址、http協議版本 - 請求頭
header:key value 格式 - 空行(CR+LF)
用於識別請求頭和請求體的分隔符,CR+LF 回車+換行符 - 請求體
響應報文
- 狀態行
狀態碼、http協議版本 - 響應頭
header:key value 格式 - 空行(CR+LF)
用於識別響應頭和響應體的分隔符,CR+LF 回車+換行符 - 響應體
響應的實體內容
HTTP方法
- get 獲取
- post 傳輸
- put 更新
- delete 刪除
- header 獲得報文首部
- options 對伺服器預先請求告知
GET / POST 區別
- get產生的url地址可以被收藏,post不可以
- get會被瀏覽器主動快取,post不會,除非手動設定
- get只能進行url編碼,post支援多種編碼方式
- get引數會被完整保留在瀏覽器歷史記錄裡,post引數不會保留
- get在url中引數有長度限制2kb,post沒有限制
- 引數的資料型別:get只接受ASCII字元,post沒有限制
- get引數直接暴露在url上,不能傳遞敏感資訊
- get通過url傳遞,post放在request body中
HTTP狀態碼
1xx: 指示資訊 - 請求已接收
2xx: 成功 - 請求被成功接收
- 200 OK
- 206 Partiaml Content 客戶端傳送了一個帶Range頭多get請求,伺服器完成了它(音訊、視訊應用)
3xx: 重定向
- 301 Moved Permanently 所請求的資源已經轉移至新的url地址
- 302 Found 所請求的資源臨時轉移至新url地址
- 304 Not Modified 客戶端有快取的文件併發出了一個條件性請求,伺服器告訴客戶端原來快取的資原始檔可以繼續使用
4xx: 客戶端錯誤
- 400 Bad Request 客戶端存在語法錯誤,伺服器無法理解
- 401 Unauthorized 請求未授權 必須和www-Authenticate 報頭域一起使用(JWT鑑權應用)
- 403 Forbidden 請求被禁止訪問(只能通過伺服器端訪問)
- 404 Not Found 請求的資源不存在
5xx: 伺服器錯誤
- 500 Internal server Error 伺服器錯誤
- 503 Server Unavailable 請求未完成或伺服器臨時過載當機
HTTP持久連線
HTTP協議採用“請求-應答”模式,每進行一次http連線就會斷開TCP連線
Keep-Alive
- Keep-Alive 模式,只要有一方未明確表示斷開連線則保持TCP連線狀態,此功能避免重複建立連線
- HTTP/1.0 未標準化
- HTTP/1.1 版本預設支援
HTTP管線化
在HTTP/1.1 版本使用Keep-Alive 下可以使用管線化(pipelining)方式傳送請求
// 未使用管線化 單個請求
req1 > server
res1 < server
req2 > server
res2 < server
req3 > server
res3 < server
// 使用管線化 打包傳送
req1 > server
req2 > server
req3 > server
res1 < server
res2 < server
res3 < server
- 管線化只通過Keep-Alive 完成,http/1.1 才支援
- 只有get 和head 方法請求才可以,post 有限制
- 初次建立連線不啟動管線化機制,因為對方伺服器不一定支援http/1.1
- 管線化不會影響伺服器響應順序
- http/1.1 要求服務端支援管線化處理不失敗即可
- chrmoe firefox 預設未開啟管線化支援,因為管線化功能不一定能帶來效能提升,伺服器支援也不好。
Cookie 維持客戶端訪問狀態
瀏覽器每次訪問會攜帶cookie 資訊,伺服器可以設定cookie,通過這個特性可以建立帶狀態(session)的http 訪問連線
// 客戶端首次訪問服務端
client -----------無cookie------------> server
client <-----set-cookie: sid=user1----- server
// 客戶端再次訪問服務端
client -----cookie: sid=user1---------> server
client <--------確認是user1訪問---------- server
session 就是服務端手動維護每個客戶端訪問的cookie,可以維護在記憶體裡也可以維護在redis 快取中。
相關文章
- 前端基礎之HTTP協議介紹前端HTTP協議
- 網路基礎與協議入門——(1)HTTP協議重點協議HTTP
- HTTP協議基礎HTTP協議
- 淺顯易懂的前端知識點(二)——HTTP協議基礎前端HTTP協議
- 重識TCP/IP協議族與HTTP基礎TCP協議HTTP
- javaweb基礎--HTTP協議JavaWebHTTP協議
- 網路基礎與協議入門——(2)TCP協議重點協議TCP
- WEB基礎及HTTP協議WebHTTP協議
- Web基礎與HTTP協議WebHTTP協議
- 基礎回顧
- 01 前端HTTP協議(圖解HTTP) 之 網路基礎前端HTTP協議圖解
- HTTP協議(2)HTTP協議
- 02 前端HTTP協議(圖解HTTP) 之 簡單的HTTP協議前端HTTP協議圖解
- python爬蟲基礎與http協議Python爬蟲HTTP協議
- HTTP協議基礎及發展歷史HTTP協議
- HTTP2 協議HTTP協議
- 基礎篇-http協議《http 簡介、url詳解、request》HTTP協議
- python+pytest介面自動化(2)-HTTP協議基礎PythonHTTP協議
- Android知識點回顧之Activity基礎Android
- Android知識點回顧之Service基礎Android
- HTTP協議之:HTTP/1.1和HTTP/2HTTP協議
- HTTP協議的特點HTTP協議
- 05 前端HTTP協議(圖解HTTP) 之 HTTP首部前端HTTP協議圖解
- 網路基礎之HTTP協議HTTP協議
- iOS網路基礎 HTTP協議iOSHTTP協議
- 回顧JavaScript基礎——函式JavaScript函式
- Java基礎知識回顧Java
- JavaWeb第五講 Web核心基礎之HTTP協議JavaWebHTTP協議
- 小白學習安全測試(一)——Http協議基礎HTTP協議
- HTTP協議和HTTPS協議的異同點?HTTP協議
- HTTP協議頭詳解 (2)HTTP協議
- 昨日PHP中高階面試重點回顧PHP面試
- 04 前端HTTP協議(圖解HTTP) 之 HTTP狀態碼前端HTTP協議圖解
- [HTTP 系列] 第 2 篇 —— HTTP 協議那些事HTTP協議
- C#基礎委託回顧C#
- Java基礎知識回顧 -SQLJavaSQL
- 前端要知道的Http協議快取前端HTTP協議快取
- 前端面試題16----http協議前端面試題HTTP協議