計算機網絡知識點全梳理(二.HTTP知識點總結)

目錄

HTTP基本概念

HTTP優缺點

HTTP優點(1.1)

HTTP缺點?

HTTP與HTTPS?

HTTP 與 HTTPS 的區別

HTTPS 解決 HTTP 的哪些安全問題?

HTTPS 如何解決安全問題?

HTTPS 連接建立的過程:

HTTP/1.1、HTTP/2、HTTP/3 演變

HTTP/1.1 相比 HTTP/1.0 的性能提升

HTTP/2 相比 HTTP/1.1 的性能改進

HTTP/2 的缺陷與 HTTP/3 的優化

總結

HTTP其他重要知識點

HTTP狀態碼

HTTP常見字段

HTTP 中的GET和POST的概念和區別


HTTP基本概念

HTTP,全稱為超文本傳輸協議(HyperText Transfer Protocol),是網絡通信的核心協議之一。它由三個關鍵概念組成:

  • 超文本(HyperText):指的是可以包含圖片、視頻和鏈接等多媒體元素的文本,這些元素可以鏈接到其他文檔或資源。
  • 傳輸(Transfer):指的是數據在網絡中的發送和接收過程,無論是從服務器到客戶端,還是反過來。
  • 協議(Protocol):定義了數據傳輸的規則和標準,確保不同計算機系統之間的通信能夠順利進行。

HTTP作為一種網絡協議,為計算機世界提供了一種標準化的通信方式。它規定了客戶端和服務器之間如何請求和交換超文本信息,包括各種控制指令和錯誤處理機制。

“傳輸”在HTTP中指的是數據在網絡中的移動,這不僅是簡單的數據遷移,還涉及到確保數據完整性和順序的復雜過程。HTTP通過定義請求和響應的格式,以及狀態碼等機制,確保了數據能夠在網絡中的兩點之間可靠地傳輸。

簡而言之,HTTP是網絡中數據傳輸的規則和規范,它使得不同計算機系統能夠高效、準確地交換超文本信息。

HTTP優缺點

HTTP優點(1.1)

HTTP以其簡潔性、靈活性、可擴展性、廣泛的應用和跨平臺特性而著稱:

  • 簡潔性:HTTP的報文結構直觀,由頭部(header)和主體(body)組成,頭部信息采用易于理解的鍵值對文本格式,這降低了學習和使用的難度。

  • 靈活性和可擴展性:HTTP協議的設計允許開發者對請求方法、URI/URL、狀態碼和頭部字段等進行自定義和擴展,提供了高度的靈活性。此外,由于HTTP工作在應用層,其下層技術可以自由變化,如HTTPS在HTTP與TCP之間增加了SSL/TLS層,而HTTP/3則采用了基于UDP的QUIC協議。

  • 廣泛應用和跨平臺性:隨著互聯網的發展,HTTP已成為網絡通信的基石,其應用場景從桌面瀏覽器到移動應用,涵蓋了新聞閱讀、社交媒體、在線購物、金融管理、在線游戲等多種服務。HTTP的跨平臺特性意味著它能夠在各種設備和操作系統上無縫工作,這進一步擴大了其應用范圍。

HTTP缺點?

無狀態特性的雙刃劍
  • 優勢在于減輕服務器負擔,因為服務器無需存儲會話狀態,可以更高效地分配資源。
  • 劣勢在于執行一系列相關操作(如用戶登錄、購物、結算等)時,由于服務器無法識別這些操作的關聯性,每次都需要重新驗證用戶身份,這可能導致用戶體驗下降。
明文傳輸的雙刃劍
  • 優勢是便于調試,因為信息以明文形式傳輸,易于通過工具如瀏覽器控制臺或Wireshark進行查看。
  • 劣勢是信息安全風險高,因為傳輸過程中的數據容易被截獲和竊取,尤其是敏感信息如賬號密碼,可能導致用戶信息泄露。
安全性不足
  • HTTP不加密,通信內容可能被竊聽,增加了賬號信息泄露的風險。
  • 不驗證通信方身份,容易受到偽裝攻擊,如訪問假冒網站,可能導致財產損失。
  • 無法保證報文的完整性,可能遭受篡改,如網頁被植入惡意廣告。

HTTP與HTTPS?

HTTP 與 HTTPS 的區別

安全性差異
  • ? ?HTTP(超文本傳輸協議)是一種明文傳輸協議,通信內容容易受到竊聽、篡改和偽造。?

  • ? ?HTTPS(安全超文本傳輸協議)在 HTTP 基礎上加入了 SSL/TLS 協議,確保數據傳輸的安全性。SSL/TLS 協議通過加密通信內容,解決了 HTTP 的安全缺陷。

連接建立過程
  • ? ?HTTP?連接相對簡單,基于 TCP 三次握手完成后即可開始數據傳輸。

  • ? ?HTTPS?除了 TCP 三次握手外,還需要額外的 SSL/TLS 握手過程,確保安全的加密通信。

端口號
  • ? ?HTTP?默認使用端口號 80。

  • ? ?HTTPS?默認使用端口號 443。

證書認證
  • HTTPS 需要向 CA(證書頒發機構)申請并安裝數字證書,驗證服務器的身份,確保通信對象的可信度。

HTTPS 解決 HTTP 的哪些安全問題?

由于 HTTP 傳輸是明文的,因此存在以下幾種主要安全風險:

  • 竊聽風險:通信內容可能被第三方截獲。

  • 篡改風險:數據傳輸過程中可能被篡改,導致信息不一致。

  • 偽裝風險:攻擊者可能偽造網站,誘導用戶輸入敏感信息。

HTTPS 通過 SSL/TLS 協議解決這些問題:

  • 信息加密:使用加密算法保證通信內容在傳輸過程中的機密性,防止被竊聽。

  • 數據完整性校驗:通過摘要算法(如哈希)生成數據的唯一指紋,確保數據未被篡改。

  • 身份驗證:通過數字證書驗證服務器身份,防止偽裝攻擊。

HTTPS 如何解決安全問題?

  • 防止竊聽:HTTPS 使用混合加密方式,即對稱加密和非對稱加密結合,確保信息在傳輸過程中加密,防止第三方監聽。

  • 防止篡改:使用消息摘要算法(如哈希算法),生成數據的獨特“指紋”,驗證數據完整性。如果數據被篡改,接收方會檢測到。

  • 防止偽裝:服務器通過數字證書提供公鑰,客戶端通過 CA 機構驗證證書,確保服務器的身份真實可信,避免中間人攻擊。

HTTPS 連接建立的過程:

HTTPS 使用 SSL/TLS 協議建立加密連接。整個過程涉及四次信息交互,確保通信的機密性、完整性與身份驗證。具體流程如下:

1.ClientHello:客戶端向服務器發起加密通信請求,發送以下信息:
  • ? ?支持的 SSL/TLS 協議版本(如 TLS 1.2)。
  • ? ?客戶端生成的隨機數(用于生成會話秘鑰)。
  • ? ?支持的加密套件列表(如 RSA 加密算法)。
2.ServerHello:服務器響應客戶端請求,發送以下信息:
  • ? ?確認 SSL/TLS 協議版本,若瀏覽器不支持則關閉連接。
  • ? ?服務器生成的隨機數(用于生成會話秘鑰)。
  • ? ?確定使用的加密套件。
  • ? ?服務器的數字證書(包含公鑰)。
3. 客戶端響應:客戶端通過 CA 的公鑰驗證服務器證書,并使用服務器公鑰加密以下內容:
  • ? ??生成的隨機數(pre-master key)。
  • ? ??加密通信算法改變通知,指示后續通信使用會話秘鑰加密。
  • ? ??客戶端握手結束通知,并將前述數據摘要發送給服務器。
4. 服務器響應:服務器收到客戶端的 pre-master key 后,通過協商的加密算法計算會話秘鑰。然后,發送以下信息:
  • ? ?加密通信算法改變通知。
  • ? ?服務器握手結束通知,并將數據摘要發送給客戶端進行驗證。

至此,SSL/TLS 握手完成,客戶端與服務器可以開始使用會話秘鑰加密的通信。

HTTP/1.1、HTTP/2、HTTP/3 演變

HTTP/1.1 相比 HTTP/1.0 的性能提升

HTTP/1.1 相比于 HTTP/1.0 進行了多項性能改進,主要包括:

TCP 長連接
  • HTTP/1.0 是基于短連接的,每次請求都需要建立和關閉一個新的 TCP 連接,這會帶來較大的性能開銷。
  • HTTP/1.1 引入了 TCP 長連接,即一個 TCP 連接可以復用多個 HTTP 請求和響應,避免了重復的連接建立與關閉,顯著減少了延遲和開銷。
管道化(Pipelining)
  • HTTP/1.1 支持管道化傳輸,即客戶端可以在等待第一個請求的響應時繼續發送后續請求,而不要等待每個請求的回應。這種方式降低了整體響應時間,提升了請求的處理效率。
盡管如此,HTTP/1.1 仍然存在一些性能瓶頸,主要包括
  • 頭部未壓縮:HTTP/1.1 中的請求和響應頭信息未經過壓縮,頭部信息過多時會增加延遲。
  • 冗長的頭部信息:每次請求都需要發送相同的頭部信息,造成不必要的數據傳輸浪費。
  • 隊頭阻塞:由于 HTTP/1.1 中的請求是按順序處理的,如果服務器響應慢,后續請求會被阻塞,導致延遲。
  • 缺乏請求優先級控制:無法靈活控制哪些請求應優先響應,容易影響性能。
  • 請求發起方向限制:HTTP/1.1 仍然只能由客戶端發起請求,服務器只能被動響應。

HTTP/2 相比 HTTP/1.1 的性能改進

HTTP/2 引入了一系列創新的技術,解決了 HTTP/1.1 中的多項性能瓶頸:

頭部壓縮
  • HTTP/2 使用 HPACK算法對頭部信息進行壓縮,尤其是當多個請求包含相同或相似的頭部時,協議會去除重復的部分,減少了傳輸的冗余。
  • 客戶端和服務器維護一張頭部表,使用索引來標識已經發送過的頭部字段,避免重復傳輸相同數據,顯著提高了效率。
二進制格式
  • HTTP/2 改用 二進制格式,將請求和響應的頭部與數據體都封裝為二進制幀(frame),而不是像 HTTP/1.1 那樣使用純文本格式。
  • 二進制格式更加高效,計算機可以直接解析,而不需要額外的文本解析步驟,提升了數據傳輸速度。
多路復用(Multiplexing)
  • HTTP/2 支持 多路復用,即在一個 TCP 連接中并發處理多個請求和響應,而不必按順序逐個處理。這樣避免了 HTTP/1.1 中的 隊頭阻塞(Head-of-line blocking)問題,大幅度提高了連接的效率。
流控制和優先級
  • HTTP/2 允許客戶端指定請求的優先級,服務器可以根據優先級響應高優先級的請求,減少延遲。通過流控制,HTTP/2 能在同一連接中根據網絡情況靈活地管理數據流,確保高效的數據傳輸。
服務器推送(Server Push)
  • HTTP/2 引入了 服務器推送機制,服務器可以主動推送客戶端可能需要的資源(如 JS、CSS 文件),即便客戶端未明確請求。

HTTP/2 的缺陷與 HTTP/3 的優化

盡管 HTTP/2 在性能上有顯著提升,但它仍然存在一些問題,主要與底層的 TCP 協議有關:

  • 丟包問題:在 HTTP/2 中,多個請求共享一個 TCP 連接,如果出現丟包,整個連接中的所有請求都會受到影響,導致延遲。
  • 請求阻塞:盡管 HTTP/2 可以同時發送多個請求,但如果一個請求發生丟包,仍然會導致其他請求的阻塞,這個問題與 TCP 協議本身的流量控制機制密切相關。

為了解決 HTTP/2 中的這些問題,HTTP/3 引入了新的協議設計,主要變化包括:

基于 QUIC 協議
  • HTTP/3 底層使用了 QUIC(Quick UDP Internet Connections)協議,替代了傳統的 TCP 協議。QUIC 是基于UDP的協議,UDP 本身沒有隊頭阻塞的問題,因此不會因為丟包導致整個連接的阻塞。
  • QUIC 實現了類似于 TCP 的可靠性,但比 TCP 更高效,因為它減少了連接建立的延遲,并且能夠更靈活地處理丟包問題。
減少握手次數
  • HTTP/3 將 TCP 握手和 TLS 握手?的過程合并,減少了傳統 6 次交互(3 次 TCP 握手 + 3 次 TLS 握手)為 3 次,顯著降低了建立連接的延遲。
改進的頭部壓縮
  • HTTP/3 使用 QPack頭部壓縮算法,相較于 HTTP/2 的 HPACK,QPack 進一步優化了頭部壓縮的效率。
流的獨立性
  • 由于 QUIC 允許每個流獨立于其他流進行傳輸,HTTP/3 可以在流之間靈活處理丟包,確保不會因為某個流的丟包影響到其他流。

總結

  • HTTP/1.1?相較于 HTTP/1.0 引入了 TCP 長連接和管道化技術,有效減少了連接建立的開銷,提升了傳輸效率,但仍然面臨頭部壓縮不足、隊頭阻塞等瓶頸。
  • HTTP/2在此基礎上進一步改進了性能,主要通過頭部壓縮、二進制格式、多路復用、服務器推送等技術提升了響應速度,并解決了隊頭阻塞問題。
  • HTTP/3?則通過基于 QUIC 協議,改用 UDP 解決了 HTTP/2 的丟包和隊頭阻塞問題,進一步優化了連接的效率和可靠性。

HTTP其他重要知識點

HTTP狀態碼

常見的HTTP狀態碼分為五大類,每個狀態碼由三位數字組成,第一位數字表示類別:?

1xx:信息響應
  • 100 Continue:服務器已接收請求的初步部分,客戶端應繼續請求。

  • 101 Switching Protocols:服務器同意切換協議,如從HTTP切換到WebSocket。

2xx:成功
  • 200 OK:請求成功,服務器返回所請求的資源或數據。

  • 201 Created:請求成功并創建了新的資源,常用于POST請求。

  • 204 No Content:請求成功但服務器不返回任何內容,常用于刪除操作。

3xx:重定向
  • 301 Moved Permanently:資源已永久移動到新的URL,客戶端應使用新URL訪問。

  • 302 Found:資源臨時移動到新的URL,客戶端應繼續使用原來的URL。

  • 304 Not Modified:資源未修改,客戶端可以使用緩存版本。

4xx:客戶端錯誤
  • 400 Bad Request:請求無效或語法錯誤,服務器無法處理。

  • 401 Unauthorized:請求需要身份驗證,客戶端未提供有效的憑證。

  • 403 Forbidden:服務器理解請求但拒絕執行,通常是權限問題。

  • 404 Not Found:請求的資源在服務器上未找到。

5xx:服務器錯誤
  • 500 Internal Server Error:服務器內部錯誤,無法完成請求。

  • 502 Bad Gateway:服務器作為網關或代理,從上游服務器接收到無效響應。

  • 503 Service Unavailable:服務器暫時無法處理請求,通常是因為過載或維護。

HTTP常見字段

Host?字段:客戶端發送請求時,?來指定服務器的域名。

Content-Length 字段:服務器在返回數據時,會有 Content-Length 字段,表明本次回應的數據?度。

Connection 字段:Connection 字段最常?于客戶端要求服務器使? TCP 持久連接,以便其他請求復?。

Content-Type 字段:?Content-Type 字段?于服務器回應時,告訴客戶端,本次數據是什么格式。

Content-Encoding 字段:?Content-Encoding 字段說明數據的壓縮?法。表示服務器返回的數據使?了什么壓縮格式。

HTTP 中的GET和POST的概念和區別

概念

GET:用于獲取資源,通常用于請求數據而不改變服務器狀態。

POST:用于提交數據到服務器,通常會改變服務器的狀態或產生副作用(如創建或更新資源)。

區別?
參數傳遞方式

GET:參數通過URL拼接傳遞,暴露在請求URL中,具有可見性,長度有限(取決于瀏覽器和服務器)。

POST:參數放在請求體中,通常不可見且長度理論上沒有限制,更適合傳遞大量數據或敏感信息。

安全性

GET:參數可見,數據容易暴露在瀏覽器歷史記錄、日志和緩存中,不適合傳遞敏感信息。

POST:數據放在請求體中,相對安全,但需要HTTPS才能保證數據加密傳輸。

冪等性

GET:冪等(重復請求不會改變服務器狀態)。

POST:非冪等(多次請求可能導致重復創建資源或執行多次相同操作)。

HTTPS

?HTTP 與 HTTPSHTTP HT?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62906.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62906.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62906.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第P2周:Pytorch實現CIFAR10彩色圖片識別

🍨 本文為🔗365天深度學習訓練營 中的學習記錄博客🍖 原作者:K同學啊 目標 實現CIFAR-10的彩色圖片識別實現比P1周更復雜一點的CNN網絡 具體實現 (一)環境 語言環境:Python 3.10 編 譯 器: …

Quant connect的優勢和不足,學習曲線難

Quant connect的優勢和不足 Quant connect作為一個成熟的算法交易平臺,具有許多優勢,包括: 強大的回測功能:Quant connect提供了豐富的數據源和回測功能,可以對各種交易策略進行全面的回測和分析。 容易上手&#xf…

深入理解 Ansible Playbook:組件與實戰

目錄 1 playbook介紹 2 YAML語言 2.1語法簡介 2.2數據類型 3 Playbook核心組件 3.1 hosts組件 3.2 remote_user組件 3.3 task列表和action組件 3.4 handlers 3.5 tags組件 3.6 其他組件說明 1 playbook介紹 playbook 劇本是由一個或多個"play"組成的列表。…

2024年食堂采購系統源碼技術趨勢:如何開發智能的供應鏈管理APP

本篇文章,小編將與大家一同探討2024年食堂采購系統的技術趨勢,并提供開發更智能的供應鏈管理APP的策略。 一、2024年食堂采購系統的技術趨勢 1.人工智能與機器學習的深度應用 在2024年,AI和機器學習在食堂采購系統中的應用將更加普遍。這些…

代碼隨想錄-算法訓練營-番外(圖論01:圖論理論基礎,所有可到達的路徑)

day01 圖論part01 今日任務:圖論理論基礎/所有可到達的路徑 代碼隨想錄圖論視頻部分還沒更新 https://programmercarl.com/kamacoder/圖論理論基礎.html#圖的基本概念 day01 所有可達路徑 鄰接矩陣 import java.util.Scanner;import java.util.List;import java.util.ArrayL…

系統架構的演變

什么是系統架構? 系統架構是系統的一種整體的高層次的結構表示,它確定了系統的基本組織、組件之間的關系、組件與環境的關系,以及指導其設計和發展的原則。隨著技術的發展和業務需求的增長,系統架構經歷了從簡單到復雜、從集中到…

c++總復習

C 中多態性在實際項目中的應用場景 圖形繪制系統 描述:在一個圖形繪制軟件中,可能有多種圖形,如圓形、矩形、三角形等。這些圖形都有一個共同的操作,比如繪制(draw)。通過多態性,可以定義一個基…

pip離線安裝一個github倉庫

要使用pip安裝一個本地Git倉庫,你可以按照以下步驟操作: 確保你已經克隆了Git倉庫到本地。 進入倉庫所在的目錄。 使用pip安裝。 以下是具體的命令: 克隆Git倉庫到本地(替換下面的URL為你的倉庫URL) git clone https…

【從零開始入門unity游戲開發之——C#篇04】棧(Stack)和堆(Heap),值類型和引用類型,以及特殊的引用類型string

文章目錄 知識回顧一、棧(Stack)和堆(Heap)1、什么是棧和堆2、為什么要分棧和堆3、棧和堆的區別棧堆 4、總結 二、值類型和引用類型1、那么值類型和引用類型到底有什么區別呢?值類型引用類型 2、總結 三、特殊的引用類…

【C語言實現:用隊列模擬棧與用棧模擬隊列(LeetCode 225 232)】

LeetCode刷題記錄 🌐 我的博客主頁:iiiiiankor🎯 如果你覺得我的內容對你有幫助,不妨點個贊👍、留個評論?,或者收藏?,讓我們一起進步!📝 專欄系列:LeetCode…

【Python】Selenium 爬蟲的使用技巧和案例

引言 Selenium 是 Python 中功能強大的自動化測試工具,因其能夠操控瀏覽器進行模擬操作,被廣泛應用于網頁數據爬取。相比傳統的 requests 等庫,Selenium 能更好地應對動態加載內容和復雜交互場景。本文將詳細介紹 Selenium 爬蟲的使用技巧,并提供實際案例來幫助讀者快速上…

MySQL SQL語句性能優化

MySQL SQL語句性能優化指南 一、查詢設計優化1. 避免 SELECT *2. 使用 WHERE 進行條件過濾3. 避免在索引列上使用函數和表達式4. 使用 LIMIT 限制返回行數5. 避免使用子查詢6. 優化 JOIN 操作7. 避免全表掃描 二、索引優化1. 使用合適的索引2. 覆蓋索引3. 索引選擇性4. 多列索引…

Mybatis動態sql執行過程

動態SQL的執行原理主要涉及到在運行時根據條件動態地生成SQL語句,然后將其發送給數據庫執行。以下是動態SQL執行原理的詳細解釋: 一、接收參數 動態SQL首先會根據用戶的輸入或系統的條件接收參數。這些參數可以是查詢條件、更新數據等,它們…

java jar包加密 jar-protect

介紹 java 本身是開放性極強的語言,代碼也容易被反編譯,沒有語言層面的一些常規保護機制,jar包很容易被反編譯和破解。 受classfinal(已停止維護)設計啟發,針對springboot日常項目開發,重新編寫安全可靠的jar包加殼加密技術,用于保護軟件版權。 使用說…

Linux:Git

Git常見指令: git help xx_command git xx_command --help git --version 查看git版本git config --global user.name "xxx_name" 全局級別的簽名設置,全局的放在本用 git config --global user.ema…

【WiFi】WiFi中RSSI、SNR、NF之間關系及說明

RSSI(接收信號強度指示) 定義: RSSI 是一個相對值,用于表示接收到的無線信號的強度。它通常由無線設備的硬件(如無線網卡或無線芯片)直接提供。 計算: RSSI 的計算通常是由設備的無線芯片完成的…

提升音頻轉錄準確性:VAD技術的應用與挑戰

引言 在音頻轉錄技術飛速發展的今天,我們面臨著一個普遍問題:在嘈雜環境中,轉錄系統常常將非人聲誤識別為人聲,導致轉錄結果出現錯誤。例如,在whisper模式下,系統可能會錯誤地轉錄出“謝謝大家”。本文將探…

[ZMQ] -- ZMQ通信Protobuf數據結構 1

1、前言背景 工作需要域間實現zmq通信,剛開始需要比較簡單的數據結構,比如兩個bool,后面可能就需要傳輸比較大的數據,所以記錄下實現流程,至于為啥選擇proto數據結構去做大數據傳輸,可能是地平線也用這個&…

順序表的使用,對數據的增刪改查

主函數: 3.c #include "3.h"//頭文件調用 SqlListptr sql_cerate()//創建順序表函數 {SqlListptr ptr(SqlListptr)malloc(sizeof(SqlList));//在堆區申請連續的空間if(NULLptr){printf("創建失敗\n");return NULL;//如果沒有申請成功&#xff…

React和Vue中暴露子組件的屬性和方法給父組件用,并且控制子組件暴露的顆粒度的做法

React 在 React 中,forwardRef 是一種高級技術,它允許你將 ref 從父組件傳遞到子組件,從而直接訪問子組件的 DOM 節點或公開的方法。這對于需要操作子組件內部狀態或 DOM 的場景非常有用。為了使子組件能夠暴露其屬性和方法給父組件&#xf…