HTTP協議知識點速覽

什麼是HTTP?

HTTP(HyperText Transfer Protocol),中文「超文本傳輸協議」。html

  • 是互聯網應用最普遍的網絡協議
  • 基於 TCP 的應用層協議
  • 瀏覽器與服務器之間的數據傳輸協議。
  • HTTP 協議和其餘應用層協議同樣,本質上是一種通訊格式。
  • HTTP 是信封,信封裏面的信(HTML)是內容;可是沒有信封,信也沒辦法寄出去。

HTTP的特色

  • 無鏈接:每次鏈接只處理一個請求,能夠節省傳輸時間。
  • 無狀態:服務器不知道你是誰。

HTTP工做原理

HTTP 協議工做在客戶端-服務端架構上,即瀏覽器做爲客戶端經過 URLWeb 服務器發送全部請求,Web服務器接收請求後,向瀏覽器發送響應信息。瀏覽器

f5bd0c7840160d5a121c191e7e54b4ca

HTTP報文

請求報文緩存

組成部分 描述
請求行 包含請求方法、URI、HTTP版本。
請求頭 告訴服務器關於客戶端請求的信息。
空行 告訴瀏覽器下一個是請求體。
請求體 一條 HTTP 消息要傳輸的主體。

響應報文安全

組成部分 描述
狀態行 包含HTTP版本、狀態碼、狀態信息
響應頭 相似請求頭
空行 告訴瀏覽器下一個是響應體
響應體 相似請求體
  • 請求行和請求頭(狀態行和響應頭)都是結構化的文本。
  • 主體能夠包含任意的二進制數據(圖片、視頻、音頻、軟件程序等)。

Cookie和Session

HTTP 協議是無狀態的,請求與請求之間沒有聯繫。服務器

服務器爲了知道請求來自哪一個客戶,所以 Cookie 技術出現了。網絡

Cookie架構

Cookie 包含在 HTTP 的請求頭裏,讀取這個 Cookie 就知道用戶是誰了。網站

本質上,Cookie 是一份存儲在用戶本地的文件,裏面包含了每次請求須要傳遞的信息。加密

在 Chrome 中,經過下面的操做,能夠查看瀏覽器儲存的 Cookie。url

設置 > 高級 > 隱私設置與安全性 > 網站設置 > Cookie和網站數據 > 查看全部 Cookie 和網站數據

image-20200219223518379

Session

Cookie 以明文儲存在本地,不夠安全,須要 Seesion 來解決這個問題。

Session 是存在服務器的,裏面包含了用戶狀態。

而 Cookie 中儲存了 Session ID,當瀏覽器再次請求時,會把這個 Session ID 帶上,服務器經過 Session ID 找到對應的 Session。

HTTP請求方法

請求方法 描述
GET 獲取數據
POST 傳輸數據
HEAD 相似於 GET 請求,用於獲取報文首部(請求頭)。
PUT 更新數據
DELETE 刪除數據

GET和POST的區別

  • GET 參數經過 URL 傳遞,POST 放在請求體中。
  • GET 參數長度有限制,POST 沒有。
  • POST 比 GET 請求更安全,由於 GET 請求參數直接暴露給用戶。
  • 瀏覽器回退時,GET 是無害的,POST會再次提交請求。
  • 瀏覽器會主動緩存 GET 請求,POST 不會,除非手動設置。

HTTP 狀態碼

HTTP 狀態碼根據第一個數字不一樣,能夠分爲 5 種類型:

分類 描述
1** 指示信息-收到請求,繼續處理
2** 成功-請求被成功接收
3** 重定向-須要進一步的操做,以完成請求
4** 客戶端錯誤-請求包含語法錯誤或沒法完成請求
5** 服務器錯誤-服務器在處理請求的過程當中發生了錯誤

常見 HTTP 狀態碼

  • 200(OK):請求成功。
  • 206(Partial Content):客戶端發送了一個Range的get請求,服務器完成了它。
  • 301 (Moved Permanently):永久重定向至新的 url。
  • 302(Found):臨時重定向至新的url。
  • 304(Not Modified):服務器告訴瀏覽器緩存能夠繼續使用。
  • 400(Bad Request):客戶端請求有語法錯誤,服務器理解不了。
  • 403(Forbidden):請求頁面禁止訪問。
  • 404 (Not Found):請求資源不存在。
  • 500 (Internal Server Error):服務器內部錯誤,沒法完成請求。

HTTP歷史

版本 發佈時間 簡介
HTTP/0.9 1991年 該版本極其簡單,只有一個命令GET,目前已再也不使用。
HTTP/1.0 1996 年 5 月 引入了多種功能,至今仍在使用當中。
HTTP/1.1 1997 年 1 月 引入持久鏈接,是目前最流行的版本。
HTTP/2 2015 年 5 月 引入了服務器推送等多種功能,是目前最新的版本。

持久鏈接

即 Keep-Alive 模式,保持 TCP 一直處於鏈接狀態。

HTTP 協議採用「請求-應答」模式,在普通模式中,每一個請求/應答都要新建一個鏈接,完成以後當即斷開;

當使用 Keep-Alive 模式(持久鏈接),客戶端與服務器的鏈接持續有效,再次請求,不須要從新創建鏈接。

http1.0 中默認關閉,經過請求頭加入「Connection: Keep-Alive」啓用;

http1.1中默認啓用,經過請求頭加入「Connection: close 」關閉。

管線機制

即一次性打包全部請求,沒必要在傳輸過程等待服務器響應。

  • 管線機制經過持久鏈接完成,僅 HTTP/1.1 支持。
  • 初次鏈接不要啓動管線化,服務器不必定支持。

HTTPS

HTTPS 是 HTTP 協議的安全版本。

HTTP 的數據傳輸是明文的,不安全。HTTPS 使用了 SSL/TLS 協議進行了加密處理。

  • 證書驗證階段採用非對稱加密,數據傳輸階段採用對稱加密。
  • 非對稱加密的效率是很是低的,而 http 的應用場景中存在大量的交互

WX20191127-133805@2x.png

非對稱加密:私鑰加密的密文,只能公鑰解密;公鑰加密的密文,只能用私鑰解密。

私鑰只給一我的,而公鑰能夠發給全部的人。

全部未採用 HTTPS 的網站,在 Chrome 68 中將標記爲不安全網站


參考連接

HTTP 協議入門

HTTP 協議必知必會

HTTP

HTTP Keep-Alive模式

GET和POST兩種基本請求方法的區別

[HTTPS 原理分析——帶着疑問層層深刻](

相關文章
相關標籤/搜索