【一文讀懂】HTTP與Websocket協議

HTTP協議

概述

HTTP (Hypertext Transfer Protocol),即超文本傳輸協議,是一種用于在客戶端和服務器之間傳輸超文本(例如網頁、圖片、音頻、視頻等)的通信協議。它是萬維網(WWW)的基礎,負責在瀏覽器(客戶端)和 web 服務器之間交換信息。HTTP 是一個 應用層 協議,位于 OSI 模型的第七層,通常通過 TCP(傳輸控制協議)進行通信。

HTTP 是無狀態的、面向請求/響應的協議,意思是每一次請求都是獨立的,服務器不會保存客戶端的狀態。每次客戶端發起請求,服務器都必須處理并響應,即使是同一個客戶端的連續請求,也被視為獨立的。

HTTP 請求/響應模型

HTTP 協議基于請求/響應模型,通信流程包括兩部分:客戶端發送請求,服務器返回響應。

1. HTTP 請求報文(Request Message)

一個 HTTP 請求報文主要由以下幾個部分組成:

  • 請求行(Request Line)

    • 請求方法(Request Method)

      :定義了客戶端希望進行的操作,常見的 HTTP 請求方法包括:

      • GET:請求指定的資源,通常用于獲取網頁或文件。
      • POST:將數據提交到服務器,常用于表單提交。
      • PUT:上傳數據,通常用于更新服務器上的資源。
      • DELETE:刪除指定的資源。
      • HEAD:與 GET 方法類似,但只返回響應頭,不返回實際內容。
      • PATCH:用于對已有資源進行部分修改。
    • 請求 URL(Request URL):指定資源的位置,例如 https://www.example.com/index.html

    • 協議版本(HTTP Version):指定使用的 HTTP 協議版本,通常是 HTTP/1.1HTTP/2

    示例

    GET /index.html HTTP/1.1
    
  • 請求頭部(Request Headers) 請求頭部包含了請求的元信息,描述客戶端環境、請求內容類型、認證信息等。例如:

    • User-Agent:指定發起請求的客戶端軟件信息。
    • Accept:指定客戶端能夠處理的內容類型(如 text/htmlapplication/json 等)。
    • Host:指定請求目標的主機名(用于虛擬主機的支持)。
    • Cookie:包含發送給服務器的 Cookie 數據。
    • Authorization:包含授權信息,用于身份驗證。

    示例

    User-Agent: Mozilla/5.0
    Accept: text/html,application/xhtml+xml
    
  • 請求體(Request Body) 請求體通常在 POSTPUT 等方法中使用,用于傳送數據到服務器(例如表單提交的數據、JSON 數據等)。GET 請求一般沒有請求體。

    示例(POST 請求提交表單數據):

    name=John&age=30
    
2. HTTP 響應報文(Response Message)

HTTP 響應報文由服務器發送回客戶端,通常包含服務器處理請求后的結果。響應報文的組成部分如下:

  • 響應行(Response Line)

    • 協議版本(HTTP Version):指定響應所使用的 HTTP 協議版本。
    • 狀態碼(Status Code):用于表示請求的處理結果,如成功、失敗或錯誤。
    • 狀態短語(Status Phrase):對狀態碼的簡短描述,例如 OKNot Found 等。

    示例

    HTTP/1.1 200 OK
    
  • 響應頭部(Response Headers) 響應頭部包含關于響應的元信息,描述服務器的狀態、返回的數據類型等。例如:

    • Content-Type:響應體的內容類型(如 text/htmlapplication/json 等)。
    • Content-Length:響應體的長度(以字節為單位)。
    • Date:響應的時間戳。
    • Set-Cookie:服務器返回給客戶端的 Cookie。

    示例

    Content-Type: text/html; charset=UTF-8
    Content-Length: 1234
    Set-Cookie: sessionid=abcd1234
    
  • 響應體(Response Body) 響應體包含了實際的數據內容,這是服務器返回給客戶端的主體部分。對于 GET 請求,響應體通常是請求的網頁內容、圖片、視頻等資源。對于 API 請求,響應體通常是 JSON 或 XML 格式的數據。

    示例(返回 HTML 內容):

    <html><head><title>Welcome</title></head><body><h1>Hello, World!</h1></body>
    </html>
    

3. HTTP 狀態碼

狀態碼是服務器返回給客戶端的一組三位數字,表示請求的處理狀態。常見的狀態碼包括:

  • 1xx (信息性狀態碼):請求已接收,繼續處理。
    • 100 Continue:表示服務器已收到請求頭部,客戶端可以繼續發送請求體。
    • 101 Switching Protocols:服務器正在切換協議。
  • 2xx (成功狀態碼):請求已成功處理。
    • 200 OK:請求成功,服務器返回響應數據。
    • 201 Created:請求成功,資源已創建。
    • 204 No Content:請求成功,但沒有返回內容。
  • 3xx (重定向狀態碼):需要客戶端進一步操作來完成請求。
    • 301 Moved Permanently:資源已被永久移動到新位置。
    • 302 Found:資源臨時移動到新位置。
    • 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:服務器暫時不可用。

4. HTTP 協議的版本

  • HTTP/1.0:最初的 HTTP 協議版本,支持基本的請求和響應機制,但性能較低,缺乏多路復用等特性。
  • HTTP/1.1:相比 HTTP/1.0,HTTP/1.1 增強了持久連接、管道化、分塊傳輸等特性,減少了建立連接的次數。
  • HTTP/2:引入了二進制協議、流的多路復用、頭部壓縮等技術,大大提高了性能,尤其是減少了頁面加載時間。
  • HTTP/3:基于 QUIC(Quick UDP Internet Connections)協議,旨在進一步提高性能,尤其在高延遲或丟包的網絡環境中表現更佳。

5. HTTP 與 HTTPS

  • HTTP:在客戶端和服務器之間傳輸數據時,數據是明文的,容易受到中間人攻擊。
  • HTTPS:即 HTTP over SSL/TLS,數據在傳輸過程中會進行加密,確保通信的機密性和完整性。現代 web 應用普遍推薦使用 HTTPS 來保證安全性。

WebSocket

概述

WebSocket 是一種計算機通信協議,屬于 應用層協議,它為客戶端和服務器之間提供了一個 全雙工、雙向通信 的通道。WebSocket 通過建立在 TCP 之上的連接,允許客戶端和服務器進行實時、低延遲的消息交換。WebSocket 由 IETF(Internet Engineering Task Force)發布,是一種適用于需要持續交換數據的應用的技術。

WebSocket 協議的引入,主要是為了解決傳統的 HTTP 協議在實時通信中的不足,尤其是在高頻率消息交互、雙向通信等場景中。

特點

  1. 全雙工通信(Full-Duplex)
    • WebSocket 是一種 全雙工(Full-Duplex)協議,意味著客戶端和服務器可以同時發送和接收數據。這與傳統的 HTTP 協議(單向請求-響應模式)不同。
  2. 實時性(Low Latency)
    • 一旦 WebSocket 連接建立,客戶端和服務器之間就可以在沒有建立新的連接的情況下持續發送和接收數據。避免了頻繁的連接與斷開,極大減少了延遲。
  3. 持久連接
    • WebSocket 連接在創建后保持持久性,直到顯式關閉。不同于 HTTP 請求-響應模型,WebSocket 不需要每次通信都重新建立連接,這使得通信更加高效。
  4. 低開銷
    • WebSocket 數據幀結構非常簡潔,不像 HTTP 那樣包含冗余的頭信息,因此每次傳輸的開銷非常小,適合需要頻繁數據交換的應用場景。
  5. 雙向通信
    • WebSocket 支持 雙向通信,這意味著服務器可以主動向客戶端推送數據,而不必等到客戶端發起請求。這對于需要實時推送數據的應用(如在線聊天、實時股票價格、游戲等)至關重要。

工作原理

  1. 連接建立

    • WebSocket 連接是通過HTTP 握手(HTTP Handshake)來建立的,但一旦建立連接,HTTP 連接就會升級為 WebSocket 連接。這一過程包括:
      • 客戶端發起一個 HTTP 請求,帶有 Upgrade 頭字段,向服務器請求從 HTTP 協議升級到 WebSocket 協議。
      • 服務器響應請求并發送一個 101 Switching Protocols 的狀態碼,表示協議升級成功。

    例如,客戶端請求:

    GET /chat HTTP/1.1
    Host: example.com
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
    Sec-WebSocket-Version: 13
    

    服務器響應:

    HTTP/1.1 101 Switching Protocols
    Upgrade: websocket
    Connection: Upgrade
    Sec-WebSocket-Accept: x3JJHMbDL1EzLkh9WcR+Kk0M9L+Y=
    
  2. 數據傳輸

    • 一旦建立 WebSocket 連接,客戶端和服務器可以通過 WebSocket 數據幀 交換數據。這些數據幀的傳輸是非常高效的,并且可以支持不同類型的消息:文本、二進制數據等。
  3. 連接關閉

    • 當通信結束時,任一方(客戶端或服務器)可以發起連接關閉請求,關閉時發送一個 Close 數據幀,另一方確認后連接關閉。

數據幀格式

WebSocket 數據幀的結構相對簡單,通常包括以下部分:

  1. FIN、RSV、OpCode:標識數據幀的類型和一些控制信息。
  2. 掩碼標志(Mask):指示數據是否經過掩碼處理(客戶端發送的數據必須加掩碼,服務器數據通常不需要掩碼)。
  3. 負載長度(Payload Length):表示數據負載的長度。
  4. 掩碼密鑰(Mask Key):如果數據有掩碼,則包括掩碼密鑰。
  5. 負載數據(Payload Data):實際的傳輸數據(如文本、二進制數據)。

使用場景

  1. 實時聊天應用:WebSocket 使得服務器能夠即時向客戶端推送消息,特別適合即時聊天應用。
  2. 在線游戲:實時互動和低延遲是 WebSocket 在在線游戲中的應用亮點。
  3. 股票、金融數據傳輸:WebSocket 適用于需要實時更新的數據流傳輸,如金融市場數據、股票價格更新等。
  4. 物聯網(IoT)設備通信:WebSocket 可以用于物聯網設備與云端服務器之間的實時通信,實時傳輸傳感器數據或設備狀態。
  5. 協作應用:在協作編輯應用中(例如 Google Docs),WebSocket 可以幫助多用戶實時同步內容。

總結

HTTP 協議

  • 是一種 無狀態單向 的協議,客戶端通過請求與服務器進行交互,適用于請求-響應模型的通信,如瀏覽網頁、下載文件等。
  • 每次請求都需要重新建立連接,并且包含一定的頭部信息,造成了較高的延遲和開銷。
  • 不適合需要 實時數據交換 的應用。

WebSocket 協議

  • 提供了 持久連接,支持 雙向全雙工 的通信,適用于實時性要求高、需要低延遲和高頻繁數據交換的應用,如實時聊天、在線游戲、實時數據流(如股票行情、直播視頻等)。
  • 一旦連接建立,客戶端和服務器可以隨時發送和接收數據,避免了頻繁建立連接的開銷,提高了通信效率。
特性HTTP 協議WebSocket 協議
協議類型無狀態協議,基于請求-響應模型雙向全雙工協議,基于持久連接
連接模式每次通信都需要建立新的連接(無連接)一旦建立連接,通信會保持持續開放
通信方式客戶端發起請求,服務器響應客戶端和服務器都可以隨時發送和接收數據
數據傳輸基于請求-響應,每次請求/響應時都需要傳輸頭信息傳輸數據時不需要額外的頭部信息,開銷更小
傳輸效率相對較低,頻繁建立和斷開連接帶來高開銷高效,數據傳輸時無額外的連接建立和斷開開銷
連接生命周期每次請求響應后連接關閉,短暫連接保持打開狀態,直到主動關閉
實時性請求和響應之間的延遲較高實時雙向通信,適合實時應用(如在線聊天、游戲)
數據格式主要為文本/HTML,二進制數據需要轉換支持文本(如 JSON)和二進制(如二進制流)
狀態管理無狀態,每次請求相互獨立有狀態,連接狀態保持直到主動關閉
協議使用場景網頁加載、文件傳輸、瀏覽器與服務器的通信實時通信應用,如即時消息、在線游戲、實時數據流
安全性可以通過 HTTPS 進行加密傳輸可以通過 WSS(WebSocket Secure)加密傳輸
頭部信息每次請求都會有冗長的頭部信息只有握手階段需要頭部信息,之后沒有頭部開銷
協議設計基于請求-響應的客戶端-服務器模型基于持久連接的雙向通信模型
連接模式無連接:每個請求/響應都需要建立連接持久連接:連接建立后可以進行持續的雙向通信

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

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

相關文章

IDEA集成DeepSeek

引言 隨著數據量的爆炸式增長&#xff0c;傳統搜索技術已無法滿足用戶對精準、高效搜索的需求。 DeepSeek作為新一代智能搜索技術&#xff0c;憑借其強大的語義理解與深度學習能力&#xff0c;正在改變搜索領域的游戲規則。 對于 Java 開發者而言&#xff0c;將 DeepSeek 集成…

從零開始部署DeepSeek:基于Ollama+Flask的本地化AI對話系統

從零開始部署DeepSeek&#xff1a;基于OllamaFlask的本地化AI對話系統 一、部署背景與工具選型 在AI大模型遍地開花的2025年&#xff0c;DeepSeek R1憑借其出色的推理能力和開源特性成為開發者首選。本文將以零基礎視角&#xff0c;通過以下工具鏈實現本地化部署&#xff1a; …

圖論入門算法:拓撲排序(C++)

上文中我們了解了圖的遍歷(DFS/BFS), 本節我們來學習拓撲排序. 在圖論中, 拓撲排序(Topological Sorting)是對一個有向無環圖(Directed Acyclic Graph, DAG)的所有頂點進行排序的一種算法, 使得如果存在一條從頂點 u 到頂點 v 的有向邊 (u, v) , 那么在排序后的序列中, u 一定…

第1章大型互聯網公司的基礎架構——1.2 客戶端連接機房的技術1:DNS

客戶端啟動時要做的第一件事情就是通過互聯網與機房建立連接&#xff0c;然后用戶才可以在客戶端與后臺服務器進行網絡通信。目前在計算機網絡中應用較為廣泛的網絡通信協議是TCP/IP&#xff0c;它的通信基礎是IP地址&#xff0c;因為IP地址有如下兩個主要功能。 標識設備&…

全面解析鴻蒙(HarmonyOS)開發:從入門到實戰,構建萬物互聯新時代

文章目錄 引言 一、鴻蒙操作系統概述二、鴻蒙開發環境搭建三、鴻蒙核心開發技術1. **ArkUI框架**2. **分布式能力開發**3. **原子化服務與元服務** 四、實戰案例&#xff1a;構建分布式音樂播放器五、鴻蒙開發工具與調試技巧六、鴻蒙生態與未來展望結語 引言 隨著萬物互聯時代…

Android:播放Rtsp視頻流的兩種方式

一.SurfaceView Mediaplayer XML中添加SurfaceView: <SurfaceViewandroid:id"id/surface_view"android:layout_width"match_parent"android:layout_height"match_parent"/> Activity代碼&#xff1a; package com.android.rtsp;impor…

Next.js【詳解】CSS 樣式方案

全局樣式 Global CSS 默認已創建&#xff0c;即 src\app\globals.css&#xff0c;可根據需要修改 默認在全局布局中導入 src\app\layout.tsx import "./globals.css";組件樣式 CSS Modules 新建文件 src\app\test\styles.module.css .red {color: red;}導入目標頁面…

LVS相關原理

一、LVS集群的體系結構 1.1 LVS簡介 LVS 是 Linux Virtual Server 的簡稱&#xff0c;也就是 Linux 虛擬服務器 , 是一個由章文嵩博士發起的自由軟件項目&#xff0c;它的官方站點是 www.linuxvirtualserver.org 。現在 LVS 已經是 Linux標準內核的一部分&#xff0c;在Linux2…

【2025深度學習系列專欄大綱:深入探索與實踐深度學習】

第一部分:深度學習基礎篇 第1章:深度學習概覽 1.1 深度學習的歷史背景與發展軌跡 1.2 深度學習與機器學習、傳統人工智能的區別與聯系 1.3 深度學習的核心組件與概念解析 神經網絡基礎 激活函數的作用與類型 損失函數與優化算法的選擇 1.4 深度學習框架簡介與選擇建議 第2…

Java與C語言中取模運算符%的區別對比

博客主頁&#xff1a; [小????????] 本文專欄: Java 文章目錄 &#x1f4af;前言&#x1f4af;C語言中的取模運算符 %基本行為示例 注意事項示例&#xff1a;負數取模 &#x1f4af;Java中的取模運算符 %基本行為示例 對浮點數的支持示例&#xff1a;浮點數取模 符…

OpenCV機器學習(4)k-近鄰算法(k-Nearest Neighbors, KNN)cv::ml::KNearest類

操作系統&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 編程語言&#xff1a;C11 算法描述 cv::ml::KNearest 是 OpenCV 機器學習模塊中的一部分&#xff0c;它提供了實現 k-近鄰算法&#xff08;k-Nearest Neighbors, KNN&#xff09;的…

過于依賴chatgpt編程會有哪些弊端?

過于依賴ChatGPT編程可能會帶來以下問題&#xff1a; 1. 基礎不扎實&#xff0c;容易“變菜” 以前遇到代碼還會琢磨哪里不懂、怎么改&#xff0c;現在直接復制粘貼&#xff0c;時間長了可能連基本的語法和邏輯都搞不清楚。就像考試總抄答案&#xff0c;真讓你自己寫的時候腦子…

紅隊視角出發的k8s敏感信息收集——Kubernetes API 擴展與未授權訪問

針對 Kubernetes 第三方組件與 Operator 的詳細攻擊視角分析&#xff0c;涵蓋 Service Mesh、Helm Releases 和 Database Operators 的潛在風險及利用方法。 攻擊鏈示例 1. 攻擊者通過未授權的 Tiller 服務部署惡意 Helm Chart → 2. 創建后門 Pod 并橫向移動至 Istio 控制平…

3D與2D機器視覺機械臂引導的區別

3D與2D機器視覺在機械臂引導中的主要區別如下&#xff1a; 數據維度 2D視覺&#xff1a;僅處理平面圖像&#xff0c;提供X、Y坐標信息&#xff0c;無法獲取深度&#xff08;Z軸&#xff09;數據。 3D視覺&#xff1a;處理三維空間數據&#xff0c;提供X、Y、Z坐標及物體的姿態…

日常開發中,使用JSON.stringify來實現深拷貝的坑

使用JSON.stringify的方式來實現深拷貝的弊端 弊端一&#xff1a;無法拷貝NaN、Infinity、undefined這類值 無法拷貝成功的原因&#xff1a; 對于JSON來說&#xff0c;它支持的數據類型只有null、string、number、boolean、Object、Array&#xff0c;所以對于它不支持的數據類…

AI大模型(如GPT、BERT等)可以通過自然語言處理(NLP)和機器學習技術,顯著提升測試效率

在軟件測試中,AI大模型(如GPT、BERT等)可以通過自然語言處理(NLP)和機器學習技術,顯著提升測試效率。以下是幾個具體的應用場景及對應的代碼實現示例: 1. 自動生成測試用例 AI大模型可以根據需求文檔或用戶故事自動生成測試用例。 代碼示例(使用 OpenAI GPT API): …

【Linux】Ubuntu Linux 系統——Node.js 開發環境

??大家好&#xff0c;我是練小杰&#xff0c;今天星期五了&#xff0c;同時也是2025年的情人節&#xff0c;今晚又是一個人的舉個爪子&#xff01;&#xff01; &#x1f642; 本文是有關Linux 操作系統中 Node.js 開發環境基礎知識&#xff0c;后續我將添加更多相關知識噢&a…

Dockerfile 編寫推薦

一、導讀 本文主要介紹在編寫 docker 鏡像的時候一些需要注意的事項和推薦的做法。 雖然 Dockerfile 簡化了鏡像構建的過程&#xff0c;并且把這個過程可以進行版本控制&#xff0c;但是不正當的 Dockerfile 使用也會導致很多問題。 docker 鏡像太大。如果你經常使用鏡像或者…

mysql 學習16 視圖,存儲過程,存儲函數,觸發器

視圖&#xff0c; 存儲過程&#xff0c; 存儲函數 觸發器

SpringBoot+Vue+數據可視化的動漫妝造服務平臺(程序+論文+講解+安裝+調試+售后等)

感興趣的可以先收藏起來&#xff0c;還有大家在畢設選題&#xff0c;項目以及論文編寫等相關問題都可以給我留言咨詢&#xff0c;我會一一回復&#xff0c;希望幫助更多的人。 系統介紹 在當今數字化高速發展的時代&#xff0c;動漫產業迎來了前所未有的繁榮&#xff0c;動漫…