計算機網絡-HTTP與HTTPS

文章目錄

      • 計算機網絡
        • 網絡模型
          • 網絡OSI
          • TCP/IP
        • 應用層
          • 常用協議
          • HTTP報文
          • HTTP狀態碼
          • HTTP請求類型
          • HTTP握手過程
          • HTTP連接
          • HTTP斷點續傳
          • HTTPS
          • HTTPS握手過程

計算機網絡

網絡模型

為了解決多種設備能夠通過網絡相互通信,解決網絡互聯兼容性問題。

網絡模型是計算機網絡中用于理解和設計網絡通信的分層架構

主要分OSI模型和TCP/IP模型

在這里插入圖片描述

網絡OSI
  • 物理層

    傳輸原始比特流,定義物理介質(電纜、光纖等)的電氣、機械特性。

    數據單元:比特(Bit)

  • 數據鏈路層

    數據封幀,在直接相連的節點間可靠傳輸數據幀,MAC地址尋址,錯誤檢測。

    數據單元:幀

  • 網絡層

    負責數據的路由轉發分片,IP地址尋址。

    數據單元:數據包

  • 傳輸層

    端到端通信,確保可靠傳輸(TCP)或快速傳輸(UDP)。

    數據單元:TCP,UDP

  • 會話層

    建立、管理和終止會話,同步數據交換。

  • 表示層

    數據格式轉換、加密/解密(如SSL/TLS)、壓縮(如JPEG、MPEG)。

  • 應用層

    提供用戶統一的接口,支持應用程序通信。

TCP/IP
  • 網絡接口層

    處理物理連接和本地網絡數據傳輸。

  • 網絡層

    IP尋址、路由。

  • 傳輸層

    處理主機到主機的通信(TCP、UDP)。

  • 應用層

    支持 HTTP、SMTP 等最終用戶進程。

應用層
  • 提供應用程序與網絡之間的交互接口(如瀏覽器、郵件客戶端)。
  • 用戶通過應用層協議訪問網絡服務(如訪問網頁、發送郵件)。
常用協議

HTTP,HTTPS,CDN,DNS等。

默認端口:

HTTP:80

HTTPS: 443

HTTP報文

無論是請求報文還是回應報文,均有3部分組成

|-----------------------|
| 起始行 | → 請求方法/狀態碼等
|-----------------------|
| 頭部字段 | → 元數據(鍵值對)
|-----------------------|
| 空行 | → 分隔頭部和正文
|-----------------------|
| 消息體 | → 實際傳輸的數據(可選)
|-----------------------|

  • 請求報文

    [起始行]:方法/請求URL/HTTP版本
    [頭部字段]:包含關于請求的附加信息,如Host、User-Agent、Content-Type等。
    [空行]
    [消息體]:用于傳遞數據(如 POST 請求的表單或JSON數據)。

    POST /login HTTP/1.1
    Host: www.example.com
    User-Agent: Mozilla/5.0
    Content-Type: application/x-www-form-urlencoded
    Content-Length: 27username=admin&password=123
    
  • 響應報文

    [起始行] :包含HTTP版本/狀態碼/狀態信息。
    [頭部字段] :包含關于響應的附加信息,響應數據類型,數據類型,cookie等
    [空行]
    [消息體] :包含響應的數據,通常是服務器返回的HTML、JSON等內容

    HTTP/1.1 200 OK
    Content-Type: text/html
    Content-Length: 137
    Date: Wed, 21 Oct 2023 07:28:00 GMT<html><body><h1>Welcome to Example.com</h1></body>
    </html>
    
HTTP狀態碼
分類描述常見狀態碼
1xx信息類(請求已被接收,繼續處理)100, 101
2xx成功類(請求被成功處理)200, 201, 204
3xx重定向類(需進一步操作以完成請求)301, 302, 304
4xx客戶端錯誤類(請求有誤,服務器無法處理)400, 401, 403, 404
5xx服務器錯誤類(服務器處理請求失敗)500, 502, 503

其中常用的狀態碼:

  • 200:請求被成功處理
  • 301:資源已永久遷移到新URL(網站更換域名,舊鏈接跳轉到新地址)
  • 302:資源臨時從其他URL返回,客戶端后續應繼續請求原地址(未登錄用戶訪問受限頁面,臨時跳轉到登錄頁)
  • 404:請求的資源不存在
  • 500:服務器內部錯誤,無法完成請求(后端代碼拋出未捕獲的異常,如數據庫連接失敗)
HTTP請求類型
  • GET

    • 用途:獲取資源(從服務器讀取數據)。

    • 特點:

      • 安全且冪等。(冪等:多次重復請求與單次請求效果相同)
      • 參數通過 URL 傳遞(如 /users?id=1)。
      • 通常無請求體(但技術上允許)。
    • 示例

      GET /api/users/1 HTTP/1.1
      Host: example.com
      
  • POST

    • 用途:提交資源(向服務器發送數據,可能創建新資源)。

    • 特點:

      • 非安全、非冪等(非冪等:多次請求可能產生不同結果)。
      • 數據通過請求體傳輸(如 JSON、表單)。
      • 常用于創建新資源或觸發復雜操作。
    • 示例

      POST /api/users HTTP/1.1
      Content-Type: application/json{"name": "Alice", "age": 25}
      
  • PUT

    • 用途:全量更新資源(替換目標資源的全部內容)。

    • 特點:

      • 冪等。
      • 需指定完整資源數據,用于覆蓋已有內容。
      • 若資源不存在,可能創建新資源(取決于實現)。
    • 示例

      PUT /api/users/1 HTTP/1.1
      Content-Type: application/json{"name": "Bob", "age": 30}
      
  • DELETE

    • 用途:刪除資源。

    • 特點:

      • 冪等。
      • 通常無請求體。
    • 示例

      DELETE /api/users/1 HTTP/1.1
      Host: example.com
      
  • HEAD

    • 用途:獲取資源的元數據(與 GET 類似,但無響應體)。

    • 特點:

      • 安全且冪等。
      • 常用于檢查資源是否存在或驗證緩存。
    • 示例:

      HEAD /api/users/1 HTTP/1.1
      Host: example.com
      
HTTP握手過程

HTTP 本身無握手過程,其通信依賴 TCP 三次握手建立連接。

在這里插入圖片描述

整個過程如下:

1.TCP三次握手

客戶端                        服務器|                              || ---- SYN(seq=x) ----------> ||                              || <--- SYN-ACK(seq=y, ack=x+1)-||                              || ---- ACK(ack=y+1) --------->||                              |
  • 步驟解釋:

    1. SYN:客戶端發送同步報文,攜帶初始序列號 seq=x

    2. SYN-ACK:服務器回應同步確認,攜帶自己的序列號 seq=y 和對客戶端的確認號 ack=x+1

    3. ACK:客戶端確認服務器的響應,連接建立。

2.HTTP請求/響應

TCP 連接建立后,客戶端直接發送 HTTP 請求:

GET /index.html HTTP/1.1
Host: example.com

服務器返回 HTTP 響應:

HTTP/1.1 200 OK
Content-Type: text/html<html>...</html>

3.連接關閉

通信完成后,通過四次揮手關閉連接:

客戶端                        服務器|                              || ---- FIN -------------------> || <---- ACK ------------------- ||                              || <---- FIN ------------------- || ---- ACK -------------------> ||                              |
HTTP連接

HTTP是基于 TCP 傳輸協議實現的,客戶端與服務端要進行 HTTP 通信前,需要先建立 TCP 連接,然后客戶端發送 HTTP 請求,服務端收到后就返回響應。

  • 短連接

在這里插入圖片描述

這樣的連接就是短連接,一次連接只能請求一次資源。

  • 長連接

    HTTP 的 Keep-Alive 就是實現了這個功能,可以使用同一個 TCP 連接來發送和接收多個 HTTP 請求/應答,只要任意一端沒有明確提出斷開連接,則保持 TCP 連接狀態,避免了連接建立和釋放的開銷,這個方法稱為 HTTP 長連接

在這里插入圖片描述

HTTP斷點續傳

斷點續傳允許客戶端只請求資源的一部分,而不是整個文件。這對于大文件下載非常有用,特別是當下載中斷時,可以從中斷的地方繼續,而不必重新開始

舉個例子,大文件下載中斷后恢復的流程如下:

假設文件總大小為2GB(2,147,483,648 字節),已經下載了500MB(即 524,288,000 字節)后中斷了,剩余1.5GB未下載。

  1. 客戶端首次下載(0~500MB)

    客戶端未指定 Range 頭部,嘗試完整下載:

    GET /large-video.mp4 HTTP/1.1
    Host: example.com
    
  2. 服務器響應

    服務器返回完整文件(若支持斷點續傳,會包含 Accept-Ranges: bytes):

    HTTP/1.1 200 OK
    Accept-Ranges: bytes
    Content-Length: 2147483648
    Content-Type: video/mp4[視頻文件的前 524,288,000 字節...(下載中途網絡斷開)]
    
  3. 客戶端發送 HEAD 請求

    確認服務器是否支持范圍請求:

    HEAD /large-video.mp4 HTTP/1.1
    Host: example.com
    
  4. 服務器響應:

    返回 Accept-Ranges: bytes 表示支持:

    HTTP/1.1 200 OK
    Accept-Ranges: bytes
    Content-Length: 2147483648
    Content-Type: video/mp4
    Last-Modified: Wed, 21 Oct 2023 00:00:00 GMT
    ETag: "abc123xyz"
    
  5. 客戶端發起續傳請求:

    通過 Range 頭部指定從已下載位置繼續請求:

    GET /large-video.mp4 HTTP/1.1
    Host: example.com
    Range: bytes=524288000-      # 請求 500MB 之后的所有數據
    If-Range: "abc123xyz"        # 使用 ETag 校驗文件未修改
    
    • Range: bytes=524288000-:表示請求從第 500MB 到文件末尾。

    • If-Range:若文件未修改(ETag 匹配),服務器返回剩余部分;若已修改,返回完整文件。

  6. 服務器處理請求:

    • 文件未修改:返回 206 Partial Content 和剩余數據:

      HTTP/1.1 206 Partial Content
      Content-Range: bytes 524288000-2147483647/2147483648
      Content-Length: 1623195648  # 剩余 1.5GB 的長度(2147483648 - 524288000=1623195648)
      Content-Type: video/mp4
      ETag: "abc123xyz"[視頻文件的 500MB ~ 2GB 數據]
      
    • 文件已修改:返回 200 OK 和完整文件(需重新下載)。

  7. 客戶端合并文件:

    客戶端將已下載的 500MB 數據與續傳的 1.5GB 數據按字節順序拼接,得到完整文件。

HTTPS

HTTP和 HTTPS(HTTP Secure)是 Web 通信的核心協議,HTTPS 本質是 HTTP 的安全版本,通過加密和身份驗證保障數據傳輸的安全性。

HTTP為什么不安全?

核心原因在于其明文傳輸、缺乏身份驗證和完整性保護

  • 明文傳輸

    HTTP協議在傳輸過程中不加密數據,所有內容(如密碼、銀行卡號、聊天記錄)均以明文形式在網絡中傳輸。

  • 無身份驗證

    HTTP協議不驗證服務器身份,用戶無法確認自己連接的是真實服務器還是攻擊者的偽造站點。

  • 數據無完整性保護

    HTTP傳輸的數據無完整性校驗機制,攻擊者可隨意修改傳輸內容。

所以就需要用到HTTPS進行安全管理:

那么HTTPS是如何保證安全性的呢?

  • 在 TCP 和 HTTP 網絡層之間加入了 SSL/TLS 安全協議,使得報文能夠加密傳輸。
  • HTTPS 在 TCP 三次握手之后,還需進行 SSL/TLS 的握手過程,才可進入加密報文傳輸。
  • HTTPS 協議需要向 CA(證書權威機構)申請數字證書,來保證服務器的身份是可信的。
HTTPS握手過程

HTTPS 在 TCP 連接基礎上增加了 TLS/SSL 握手,用于協商加密參數、驗證身份并生成會話密鑰。

1.TCP 三次握手

與 HTTP 相同,首先建立 TCP 連接。

2.TLS握手

客戶端                                    服務器|                                          || ---- Client Hello(支持的加密套件等)-----> ||                                          || <---- Server Hello(選定加密套件)--------- || <---- Certificate(服務器證書)----------- || <---- Server Key Exchange(可選)--------- || <---- Server Hello Done ---------------- ||                                          || ---- Client Key Exchange(預主密鑰)------> || ---- Change Cipher Spec(準備加密)-------> || ---- Finished(加密驗證)----------------> ||                                          || <---- Change Cipher Spec(準備加密)------- || <---- Finished(加密驗證)---------------- ||                                          |
  • 第一次握手

    客戶端向服務器發起加密通信請求,也就是 ClientHello 請求。

    • TLS 版本:支持的 TLS 版本。
    • 隨機數1:32 字節的隨機數,用于生成會話密鑰。
    • 加密套件列表:支持的加密算法組合
  • 第二次握手

    服務器收到客戶端請求后,向客戶端發出響應,也就是 SeverHello。

    • TLS 版本:雙方協商后的版本。
    • 隨機數2:32 字節的隨機數,也用于生成會話密鑰。
    • 選定的加密套件:從客戶端列表中選擇的加密套件
    • 證書鏈:服務器公鑰證書(由 CA 簽發)
  • 第三次握手

    Client Key Exchange。

    客戶端收到服務器的回應之后,首先通過瀏覽器或者操作系統中的 CA 公鑰,確認服務器的數字證書的真實性。

    如果證書沒有問題,客戶端會從數字證書中取出服務器的公鑰,然后使用它加密報文,向服務器發送如下信息:

    • 隨機數3:該隨機數會被服務器公鑰加密。
    • 加密通信算法改變通知,通知服務器后續消息將加密。
    • 客戶端握手結束通知。

    密鑰生成過程:

    1. 客戶端使用3個隨機數生成 主密鑰(Master Secret)
    2. 主密鑰進一步生成 會話密鑰(Session Key)
  • 第四次握手

    • 服務器 → 客戶端
      服務器確認加密參數:
      • Change Cipher Spec:通知客戶端后續消息加密。
      • Finished:發送加密的驗證消息,確認握手完整性。

3.加密的HTTP通信

握手完成后,所有 HTTP 數據通過會話密鑰加密傳輸:

客戶端                                    服務器|                                          || ---- Encrypted HTTP Request -----------> || <---- Encrypted HTTP Response ---------- ||                                          |

4.連接關閉

先關閉 TLS 連接,再關閉 TCP 連接。

在這里插入圖片描述
不斷學習中,結合小林Coding整理了些筆記,感謝大家的觀看>W<

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

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

相關文章

Springboot 跨域攔截器配置說明

錯誤代碼 跨域設置 Configuration public class WebConfig implements WebMvcConfigurer {/*** cors 跨域配置*/Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedMethods("GET", "HEAD", &qu…

受不了github的網絡限制了,我開源了一個圖床工具 gitee-spring-boot-starter

嗨嗨嗨~ 我老馬又又來了&#xff01;&#xff01;&#xff01;上次寫了一篇我開源了一款阿里云OSS的spring-boot-starter&#xff0c;然后買的資源包到期了&#xff0c;后面又想白&#xff08;開&#xff09;嫖&#xff08;源&#xff09;的路子&#xff0c;首先想到了使用gith…

基于labview的聲音采集、存儲、處理

程序1&#xff1a;基于聲卡的數據采集 程序2&#xff1a;基于聲卡的雙聲道模擬輸出 程序3&#xff1a;聲音信號的采集與存儲 程序4&#xff1a;聲音信號的功率譜分析 程序5&#xff1a;基于labview的DTMF

第一次經歷項目上線

這幾天沒寫csdn&#xff0c;因為忙著項目上線的問題&#xff0c;我這階段改了非常多的前端bug哈哈哈哈&#xff0c;說幾個比較好的bug思想&#xff01; 這個頁面算是我遇到的比較大的bug&#xff0c;因為我一開始的邏輯都寫好了&#xff0c;詢價就是在點擊快遞公司彈出彈框的時…

基于EFISH-SCB-RK3576/SAIL-RK3576的消防機器人控制器技術方案?

&#xff08;國產化替代J1900的應急救援智能化解決方案&#xff09; 一、硬件架構設計? ?極端環境防護系統? ?防爆耐高溫設計?&#xff1a; 采用陶瓷纖維復合裝甲&#xff08;耐溫1200℃持續1小時&#xff09;&#xff0c;通過GB 26784-2023消防設備防爆認證IP68防護等級…

企業開發工具git的使用:從入門到高效團隊協作

前言&#xff1a;本文介紹了Git的安裝、本地倉庫的創建與配置&#xff0c;以及工作區、暫存區和版本庫的區分。詳細講解了版本回退、撤銷修改等操作&#xff0c;并深入探討了分支管理&#xff0c;包括分支的創建、切換、合并、刪除及沖突解決。此外&#xff0c;還介紹了遠程操作…

Java反射機制詳解:原理、應用與實戰

一、反射機制概述 Java反射(Reflection)是Java語言的一個強大特性&#xff0c;它允許程序在運行時(Runtime)獲取類的信息并操作類或對象的屬性、方法等。反射機制打破了Java的封裝性&#xff0c;但也提供了極大的靈活性。 反射的核心思想&#xff1a;在運行時而非編譯時動態獲…

成功案例丨從草圖到鞍座:用先進的發泡成型仿真技術變革鞍座制造

案例簡介 在鞍座制造中&#xff0c;聚氨酯泡沫成型工藝是關鍵環節&#xff0c;傳統依賴實驗測試的方法耗時且成本高昂。為解決這一問題&#xff0c;意大利自行車鞍座制造商 Selle Royal與Altair合作&#xff0c;采用Altair Inspire PolyFoam軟件進行發泡成型仿真。 該工具幫助團…

隧道結構安全在線監測系統解決方案

一、方案背景 隧道是地下隱蔽工程&#xff0c;會受到潛在、無法預知的地質因素影響。隨著我國公路交通建設的發展&#xff0c;隧道占新建公路里程的比例越來越大。隧道屬于線狀工程&#xff0c;有的規模較大&#xff0c;可長達幾公里或數十公里&#xff0c;往往穿越許多不同環境…

選錯方向太致命,華為HCIE數通和云計算到底怎么選?

現在搞HCIE的兄弟越來越多了&#xff0c;但“數通和云計算&#xff0c;到底考哪個&#xff1f;”這問題&#xff0c;依舊讓不少人頭疼。 一個是華為認證的老牌王牌專業——HCIE數通&#xff0c;穩、系統、崗位多&#xff1b; 一個是新趨勢方向&#xff0c;貼合云原生、數字化…

相機基礎常識

相機基礎常識 相機中顏色濾鏡的作用&#x1f3a8; 1. **捕捉彩色圖像**? 最常見的顏色濾鏡陣列是 **拜耳濾鏡&#xff08;Bayer Filter&#xff09;**&#xff1a; &#x1f50d; 2. **實現特定的圖像效果或分析功能**? 常見的濾鏡類型包括&#xff1a; &#x1f6e0;? 3. *…

paddle ocr本地化部署進行文字識別

一、Paddle 簡介 1. 基本概念 Paddle&#xff08;全稱 PaddlePaddle&#xff0c;飛槳&#xff09;是百度開發的 開源深度學習平臺&#xff0c;也是中國首個自主研發、功能豐富、技術領先的工業級深度學習平臺。它覆蓋了深度學習從數據準備、模型訓練、模型部署到預測的全流程…

開源AI大模型等“神秘組合”,如何顛覆零售業數字化轉型?

基于開源AI大模型、AI智能名片與S2B2C商城小程序源碼的零售行業數字化轉型新路徑研究 摘要&#xff1a;在業界將企業數字化轉型劃分為管理數字化、工業數字化和營銷數字化三大部分的背景下&#xff0c;國內大型制造企業在ERP與工業4.0洗禮下正邁向智能型發展道路。而零售行業面…

uniapp+vite+cli模板引入tailwindcss

目前vitecli方式用的都是官方提供的模板&#xff0c;vite版本還是4.14版本&#xff0c;較舊&#xff0c;而tailwindcss已經有了4版本&#xff0c;實際發現引入最新版會報錯&#xff0c;因而繼續使用3.3.5版本 pnpm install tailwindcss3.3.5 uni-helper/vite-plugin-uni-tail…

Golang中的runtime.LockOSThread 和 runtime.UnlockOSThread

在runtime中有runtime.LockOSThread 和 runtime.UnlockOSThread 兩個函數&#xff0c;這兩個函數有什么作用呢&#xff1f;我們看一下標準庫中對它們的解釋。 runtime.LockOSThread // LockOSThread wires the calling goroutine to its current operating system thread. // T…

Ubuntu搭建NFS服務器的方法

0 工具 Ubuntu 18.041 Ubuntu搭建NFS服務器的方法 在Ubuntu下搭建NFS&#xff08;網絡文件系統&#xff09;服務器可以讓我們像訪問本地文件一樣訪問Ubuntu上的文件&#xff0c;例如可以把開發板的根文件系統放到NFS服務器目錄下方便調試。 1.1 安裝nfs-kernel-server&#…

HarmonyOS Next應用分層架構下組件封裝開發實踐

基于鴻蒙應用分層架構的ArkUI組件封裝實踐 在鴻蒙應用開發中&#xff0c;合理利用 ArkUI 組件進行封裝&#xff0c;可以實現代碼復用&#xff0c;提升開發效率。本文將結合鴻蒙應用分層架構的特點&#xff0c;詳細探討幾個典型的 ArkUI 組件封裝場景及其實現方案。 華為鴻蒙應…

JAVA請求vllm的api服務報錯Unsupported upgrade request、 Invalid HTTP request received.

環境&#xff1a; vllm 0.8.5 java 17 Qwen3-32B-FP8 問題描述&#xff1a; JAVA請求vllm的api服務報錯Unsupported upgrade request、 Invalid HTTP request received. WARNING: Unsupported upgrade request. INFO: - "POST /v1/chat/completions HTTP/1.1&…

舊 docker 版本通過 nvkind 搭建虛擬多節點 gpu 集群的坑

踩坑 參考nvkind教程安裝到Setup這一步&#xff0c;由于docker版本較舊&#xff0c;–cdi.enabled 和 config 參數執行不了 手動修改 /etc/docker/daemon.json 配置文件 "features": {"cdi": true}手動修改 /etc/nvidia-container-runtime/config.toml 配…

C++:與7無關的數

【描述】 一個正整數,如果它能被7整除,或者它的十進制表示法中某一位上的數字為7,則稱其為與7相關的數.現求所有小于等于n(n < 100)的與7無關的正整數的平方和. 【輸入】 輸入為一行,正整數n(n < 100) 【輸出】 輸出一行&#xff0c;包含一個整數&#xff0c;即小于等于n…