Http與Https的區別(精簡版包含協議說明)

_冷冷發表於2020-11-25

一、HTTP與HTTPS的區別

  1. HTTP 標準埠是80 ,而 HTTPS 的標準埠是443;
  2. HTTP 的URL 以http:// 開頭,而HTTPS 的URL 以https:// 開頭;
  3. HTTP 對傳輸資料未做SSL/TLS加密,而 HTTPS 的傳輸資料是經過SSL/TLS加密的,相對來說https更安全;
  4. 在OSI 網路模型中,HTTP工作於應用層,而HTTPS 的安全傳輸機制工作在傳輸層;
  5. HTTP無需證書,而HTTPS 需要CA機構頒發的SSL證書(證書免費的少,一般需要花錢買);

二、HTTP與HTTPS的特點

HTTP的特點:

  • 無狀態:協議對客戶端沒有狀態儲存,對事物處理沒有“記憶”能力,比如訪問一個網站需要反覆進行登入操作
  • 無連線:HTTP/1.1之前,由於無狀態特點,每次請求需要通過TCP三次握手四次揮手,和伺服器重新建立連線。比如某個客戶機在短時間多次請求同一個資源,伺服器並不能區別是否已經響應過使用者的請求,所以每次需要重新響應請求,需要耗費不必要的時間和流量。
  • 基於請求和響應:基本的特性,由客戶端發起請求,服務端響應
  • 簡單快速、靈活
  • 通訊使用明文、請求和響應不會對通訊方進行確認、無法保護資料的完整性

HTTPS的特點:

  • 內容加密:採用混合加密技術,中間者無法直接檢視明文內容
  • 驗證身份:通過證書認證客戶端訪問的是自己的伺服器
  • 保護資料完整性:防止傳輸的內容被中間人冒充或者篡改

三、HTTP的格式

請求報文(包含四部分):

  • 請求行*:包含請求方法、URL、HTTP版本資訊
  • 請求頭*:包含host、Content-type等資訊
  • 空行
  • 訊息體

響應報文(包含四部分):

  • 響應行*:包含HTTP版本、狀態碼、狀態碼的原因短語
  • 響應頭*:
  • 空行
  • 響應訊息體

請求行和請求頭是必有選項

四、HTTP常用方法

  • GET:請求獲取Request-URI所標識的資源     ----相當於查詢
  • POST:在Request-URI所標識的資源後附加新的資料    ----相當於修改
  • PUT: 請求伺服器儲存一個資源,並用Request-URI作為其標識   ----相當於增加
  • DELETE:請求伺服器刪除Request-URI所標識的資源   ----相當於刪除
  • HEAD:請求獲取由Request-URI所標識的資源的相應訊息報頭
  • OPTIONS:查詢相應URI支援的HTTP方法(還有其他方法,不常用)

  五、常見的首部

  • 通用首部欄位(請求報文與響應報文都會使用的首部欄位)

    • Date:建立報文時間
    • Connection:連線的管理
    • Cache-Control:快取的控制
    • Transfer-Encoding:報文主體的傳輸編碼方式
  • 請求首部欄位(請求報文會使用的首部欄位)

    • Host:請求資源所在伺服器
    • Accept:可處理的媒體型別
    • Accept-Charset:可接收的字符集
    • Accept-Encoding:可接受的內容編碼
    • Accept-Language:可接受的自然語言
  • 響應首部欄位(響應報文會使用的首部欄位)

    • Accept-Ranges:可接受的位元組範圍
    • Location:令客戶端重新定向到的URI
    • Server:HTTP伺服器的安裝資訊
  • 實體首部欄位(請求報文與響應報文的的實體部分使用的首部欄位)

    • Allow:資源可支援的HTTP方法
    • Content-Type:實體主類的型別
    • Content-Encoding:實體主體適用的編碼方式
    • Content-Language:實體主體的自然語言
    • Content-Length:實體主體的的位元組數
    • Content-Range:實體主體的位置範圍,一般用於發出部分請求時使用

六、HTTP與HTTPS的工作原理

HTTP的工作原理:

  • 客戶與伺服器建立連線
  • 客戶向伺服器提出請求
  • 伺服器接受請求,並根據請求返回相應的檔案作為應答
  • 客戶與伺服器關閉連線

HTTPS的工作原理:

  • client向server傳送請求https://baidu.com,然後連線到server的443埠,傳送的資訊主要是隨機值1和客戶端支援的加密演算法。
  • server接收到資訊之後給予client響應握手資訊,包括隨機值2和匹配好的協商加密演算法,這個加密演算法一定是client傳送給server加密演算法的子集。
  • 隨即server給client傳送第二個響應報文是數字證書。服務端必須要有一套數字證書,可以自己製作,也可以向組織申請。區別就是自己頒發的證書需要客戶端驗證通過,才可以繼續訪問,而使用受信任的公司申請的證書則不會彈出提示頁面,這套證書其實就是一對公鑰和私鑰。傳送證書,這個證書其實就是公鑰,只是包含了很多資訊,如證書的頒發機構,過期時間、服務端的公鑰,第三方證書認證機構(CA)的簽名,服務端的域名資訊等內容。
  • 客戶端解析證書,這部分工作是由客戶端的TLS來完成的,首先會驗證公鑰是否有效,比如頒發機構,過期時間等等,如果發現異常,則會彈出一個警告框,提示證書存在問題。如果證書沒有問題,那麼就生成一個隨即值(預主祕鑰)。
  • 客戶端認證證書通過之後,接下來是通過隨機值1、隨機值2和預主祕鑰組裝會話祕鑰。然後通過證書的公鑰加密會話祕鑰。
  • 傳送加密資訊,這部分傳送的是用證書加密後的會話祕鑰,目的就是讓服務端使用祕鑰解密得到隨機值1、隨機值2和預主祕鑰。
  • 服務端解密得到隨機值1、隨機值2和預主祕鑰,然後組裝會話祕鑰,跟客戶端會話祕鑰相同。
  • 客戶端通過會話祕鑰加密一條訊息傳送給服務端,主要驗證服務端是否正常接受客戶端加密的訊息。
  • 同樣服務端也會通過會話祕鑰加密一條訊息回傳給客戶端,如果客戶端能夠正常接受的話表明SSL層連線建立完成了。

七、常見的HTTP相應狀態碼

  • 1XX:資訊性狀態碼:接收的請求正在處理
  • 2XX:成功狀態碼:請求正常處理完畢、
  • 3XX:重定向狀態碼:需要進行附加操作進一步完成請求
  • 4XX:客戶端錯誤狀態碼:伺服器無法處理請求
  • 5XX:伺服器錯誤狀態碼:伺服器處理請求出錯

詳細的如下:

  • 200:請求被正常處理
  • 204:請求被受理但沒有資源可以返回
  • 206:客戶端只是請求資源的一部分,伺服器只對請求的部分資源執行GET方法,相應報文中通過Content-Range指定範圍的資源。
  • 301:永久性重定向
  • 302:臨時重定向
  • 303:與302狀態碼有相似功能,只是它希望客戶端在請求一個URI的時候,能通過GET方法重定向到另一個URI上
  • 304:傳送附帶條件的請求時,條件不滿足時返回,與重定向無關
  • 307:臨時重定向,與302類似,只是強制要求使用POST方法
  • 400:請求報文語法有誤,伺服器無法識別
  • 401:請求需要認證
  • 403:請求的對應資源禁止被訪問
  • 404:伺服器無法找到對應資源
  • 500:伺服器內部錯誤
  • 503:伺服器正忙

參考連結:

https://blog.csdn.net/xiaoming100001/article/details/81109617

https://blog.csdn.net/u011635492/article/details/82846618?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-7.not_use_machine_learn_pai&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-7.not_use_machine_learn_pai

相關文章