HTTP超文本傳輸協議----記錄

最近時不時會看到一些HTTP的帖子,所以自己也寫一個,拿來備忘

1. 什麼是超文本傳輸協議

HTTP中文全稱就叫「超文本傳輸協議」
之前一直都是看過就完了,這兩天看到幾篇文章,詳細解釋了一下這個名字,所以我也就跟着大概理解了一下。
超文本傳輸協議,分爲三個詞:「超文本」,「傳輸」,「協議」
超文本:互聯網初期只能傳遞文字文本信息,後來加了圖片、視頻、音頻等信息,再後來,裏面加了超鏈接,可以通過超鏈接跳轉,到這裏,就已經不是簡單地純文本信息了,語義擴大之後就被稱爲「超文本」‘。
傳輸:我通常理解爲「寄快遞」,只是「寄」的東西是數據,現實生活中是某個物品,這個時候,出來2個概念,一個「請求方」,一個「應答方」
在這裏,我們HTTP的請求是參見上網過程,請求百度:請求方發起請求並傳遞數據,響應方對請求執行並返回數據,這裏是一來一回的交互
協議:就是我們之間約定好的一種行爲方式。協議也分很多種,我們經常使用的QQ,使用就是QICQ協議,其實就是一種準則,我告訴你,我接受json格式的數據,你給我一個二進制的格式數據,那我就用不了,不知道你想說什麼(舉例就是我告訴你只會中文,你給我寫了一封日文信,我就讀不懂)

2、HTTP傳輸過程

目前我們計算機的數據傳輸,無論是不是HTTP,還是其他的數據,其實 都要經過分層傳遞,這就又到了四層模型,五層模型,七層模型了,這裏不展開,貼個圖,看看就行。
在這裏插入圖片描述

3、瀏覽器

HTTP請求,常見的使用是瀏覽器上,這裏簡單瞭解一下瀏覽器的內核。
目前市面上,我們經常看到360瀏覽器,谷歌瀏覽器,百度瀏覽器,搜狗瀏覽器,火狐瀏覽器,Safari(蘋果系統的瀏覽器)等等,會看到很多,但是其實很多瀏覽器,本質上都是使用的別人的內核,他們只是做了優化,如界面、功能增刪、響應速度等等。
那麼就大概瞭解一下主流的幾款瀏覽器內核吧。

  • IE
  • Firefox
  • Chrome
  • Safari
  • Opera

4、HTTP狀態碼

這個地方,作爲測試而言,是一個面試的考點吧,還是要知道的
1XX:等待執行,是一種中間狀態,實際情況用到的比較少
2XX:請求成功
3XX:重定向
4XX:請求方錯誤
5XX:服務端錯誤

5、HTTP幾種請求

  • GET
  • POST
  • DELETE
  • PUT
  • HEAD
  • OPTIONS
  • TRACE
  • CONNECT
    一般使用最多的是GET和POST,其次是PUT和DELETE,另外的幾個瞭解即可,此處,我想多提一下GET和POST請求。
    有一個比較常見的問題是:GET和POST的區別。
    在這裏,需要了解2個詞:安全冪等
    冪等解釋一下概念:多次請求,返回相同的值,就是冪等
    get請求是向服務器獲取數據,常見的如查詢列表的功能
    post是提交一個數據,常見的是登錄,編輯等功能
    那麼就可以看到:
    GET是「只讀」,無論你操作多少次,都不會影響服務器上的數據,而且每次的結果都是相等的,所以GET冪等且安全
    POST,是新增或者提交,那麼就會修改服務器上的數據,一般會創建資源(例如新增用戶),所以POST不冪等,且不安全

6、HTTP請求常見字段

  • 請求頭
    Request URL: url(這個地方還有個延伸:URL和URI,但是 我也沒了解,就不寫了
    Request Method: 請求方式
    Status Code: 狀態碼
  • 請求body
    content-length:字節長度
    content-type:用於服務器迴應時,告訴客戶端,本次數據是什麼格式
    date:本次請求的時間
    set-cookie:cookie
    status:狀態

7、三次握手和四次揮手

因爲HTTP請求是基於TCP傳輸協議進行傳輸的(HTTP/3 把 TCPP 層換成了基於 UDP 的 QUIC),所以這個地方延伸一下TCP請求的三次握手和四次揮手,不想詳細講,講了又有很多東西,貼個圖看看吧

  • 三次握手
    在這裏插入圖片描述
  • 四次揮手
    在這裏插入圖片描述

8、HTTP請求特點

HTTP 最突出的優點是:
簡單、靈活和易於擴展、應用廣泛和跨平臺

  • 簡單:
    結構就是header+body
    參數就是key:value
  • 靈活和易於擴展
    從HTTP本身來說,開發人員可以自行添加數據,狀態碼,字段都沒有固定死
    從結構上來說,HTTP在應用層,那麼下層可以 隨意變動
  • 應用廣泛和跨平臺
    用戶端有web,app,手機網頁,等等
    廣泛的跨平臺

缺點:
無狀態和不安全

  • 無狀態
    無狀態的好處就是減少資源,畢竟你要存儲狀態也是需要字段的
    無狀態的缺點就是需要驗證身份的操作,你需要無限循環登錄
    解決這個問題,我們增加了cookie
  • 不安全
    因爲HTTP是明文傳輸(抓包是能看到你傳輸的信息的)那麼就導致不安全
    解決這個問題,我們增加了HTTPS

9、HTTPS

因爲HTTP的不安全性,導致後續出現一個HTTPS
HTTPS = HTTP + SSL
那麼問題來了,HTTPS和HTTP請求的區別是什麼?
在這裏插入圖片描述

  • 安全性
    HTTP請求是明文的
    HTTPS進行了SSL加密
  • 連接建立
    HTTP直接進行TCP三次握手即可
    HTTPS除了TCP三次握手外,還需要進行SSL握手
  • 端口
    HTTP端口默認80
    HTTPS端口默認443
  • CA證書 HTTP不需要CA證書 HTTPS需要CA證書確認身份