計算機網絡---http(超文本傳輸協議)

1. HTTP的定義與核心屬性

HTTP(HyperText Transfer Protocol,超文本傳輸協議)是萬維網(WWW)的核心通信協議,定義了客戶端(如瀏覽器、APP)與服務器之間如何傳輸“超文本”(包括HTML、圖片、JSON、視頻等資源)的規則。它基于TCP/IP協議棧工作,是一種應用層協議,其設計目標是實現“簡單、可擴展、無狀態”的通信。

HTTP的兩大核心屬性決定了其底層邏輯:

  • 無狀態(Stateless):服務器不會記錄客戶端的歷史請求信息。例如,用戶第一次訪問某網站時登錄,第二次訪問時服務器仍需重新驗證身份——這是為了簡化服務器設計、提高并發處理能力,但也帶來了“會話維持”的需求(后續通過Cookie、Session補充)。
  • 無連接(Connectionless,早期特性):HTTP/1.0及之前,每次請求-響應后都會關閉TCP連接。這導致頻繁請求時“三次握手”“四次揮手”的開銷過大,因此HTTP/1.1引入了Keep-Alive長連接,允許同一TCP連接處理多個請求。

2. HTTP的發展歷程:從0.9到3.0的演進

HTTP自1989年由蒂姆·伯納斯-李(Tim Berners-Lee)設計以來,經歷了多次版本迭代,核心目標是優化性能、提升安全性、擴展功能

版本發布時間核心改進
HTTP/0.91991年極簡設計:僅支持GET方法,無請求頭/響應頭,響應內容僅為純HTML文本,無狀態碼。
HTTP/1.01996年1. 新增POST/HEAD方法;
2. 引入請求頭(如User-Agent)和響應頭;
3. 支持多種媒體類型(圖片、音頻等);
4. 新增狀態碼(如200、404)。
HTTP/1.11999年1. 支持Keep-Alive長連接(默認開啟);
2. 引入“管線化”(Pipelining,允許同時發送多個請求);
3. 新增PUT/DELETE/OPTIONS方法;
4. 支持虛擬主機(Host頭)、分塊傳輸(Transfer-Encoding: chunked)。
HTTP/22015年1. 采用二進制幀(替代HTTP/1.x的文本格式),減少解析開銷;
2. 實現多路復用(同一TCP連接中并行處理多個請求,解決HTTP/1.1的“隊頭阻塞”);
3. 支持服務器推送(Server Push,主動向客戶端發送依賴資源,如HTML引用的CSS);
4. 頭部壓縮(HPACK算法,減少重復頭信息傳輸)。
HTTP/32022年1. 基于QUIC協議(而非TCP),使用UDP實現可靠傳輸;
2. 徹底解決“隊頭阻塞”(TCP是連接級阻塞,QUIC是流級阻塞);
3. 更快的連接建立(0-RTT/1-RTT握手,無需TCP三次握手);
4. 原生支持加密(基于TLS 1.3)。

當前主流應用仍以HTTP/1.1和HTTP/2為主,HTTP/3正逐步普及(如Chrome、Cloudflare已支持),其核心優勢是在高延遲網絡(如移動網絡)中大幅提升速度。

3. HTTP的工作流程:從“輸入URL”到“頁面顯示”

當用戶在瀏覽器中輸入https://www.example.com(注:實際是HTTPS,此處以HTTP邏輯為例)并按下回車,整個HTTP通信流程可分為7個步驟:

步驟1:URL解析與DNS查詢

瀏覽器首先解析URL,提取核心信息:

  • 協議:HTTP/HTTPS;
  • 域名:www.example.com
  • 端口:HTTP默認80,HTTPS默認443(若URL未指定則用默認);
  • 路徑:如/index.html(默認路徑為/)。

隨后,瀏覽器通過DNS查詢將域名轉換為服務器的IP地址(如192.168.1.1):先查本地DNS緩存,若未命中則向根DNS、頂級域DNS(.com)、權威DNS逐層查詢,最終獲取IP。

步驟2:建立TCP連接(HTTP/1.x/2)

HTTP基于TCP實現可靠傳輸,因此需先完成TCP三次握手

  1. 客戶端向服務器發送SYN包,請求建立連接;
  2. 服務器返回SYN+ACK包,確認請求并同步序列號;
  3. 客戶端返回ACK包,連接正式建立。

若為HTTP/3,則跳過TCP握手,直接通過QUIC協議建立UDP連接(僅需1-RTT甚至0-RTT,速度更快)。

步驟3:發送HTTP請求

連接建立后,客戶端向服務器發送HTTP請求,請求格式由“請求行 + 請求頭 + 空行 + 請求體”四部分組成(示例如下):

POST /login HTTP/1.1  # 請求行:方法 + 路徑 + 版本
Host: www.example.com  # 請求頭:Host(指定虛擬主機)
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/112.0.0.0  # 客戶端信息
Content-Type: application/json  # 請求體數據類型
Content-Length: 45  # 請求體長度
Cookie: sessionid=abc123  # 客戶端會話信息(解決無狀態){"username": "test", "password": "123456"}  # 請求體(僅POST/PUT等方法有)

步驟4:服務器處理請求

服務器(如Nginx、Apache、Tomcat)接收請求后,按以下邏輯處理:

  1. 解析請求行:確認HTTP版本、請求方法、目標路徑;
  2. 解析請求頭:獲取客戶端信息、Cookie、數據類型等;
  3. 處理業務邏輯:如查詢數據庫、驗證用戶身份(由后端程序如Java/Python實現);
  4. 構建響應數據:生成HTML、JSON等響應內容。

步驟5:返回HTTP響應

服務器處理完成后,向客戶端返回HTTP響應,格式為“狀態行 + 響應頭 + 空行 + 響應體”(示例如下):

HTTP/1.1 200 OK  # 狀態行:版本 + 狀態碼 + 原因短語
Server: Nginx  # 服務器軟件
Content-Type: text/html; charset=utf-8  # 響應體類型
Content-Length: 1024  # 響應體長度
Set-Cookie: token=def456; Path=/  # 服務器向客戶端設置Cookie<!DOCTYPE html>  # 響應體:HTML內容
<html><head><title>首頁</title></head><body>歡迎訪問!</body>
</html>

步驟6:關閉TCP連接(或復用)

  • 若為HTTP/1.0(無Keep-Alive):響應完成后立即執行TCP四次揮手關閉連接;
  • 若為HTTP/1.1(默認Keep-Alive):連接會保持一段時間(由Keep-Alive: timeout=5指定),期間可復用處理后續請求;
  • 若為HTTP/2/3:連接默認長期復用,通過多路復用處理多個請求。

步驟7:瀏覽器渲染響應體

客戶端接收響應后,若響應體是HTML,瀏覽器會按“解析HTML→構建DOM樹→解析CSS→構建CSSOM樹→合成渲染樹→布局→繪制”的流程渲染頁面,最終顯示給用戶。

4. HTTP核心組件:方法、狀態碼與頭字段

4.1 HTTP請求方法:定義“客戶端想做什么”

HTTP方法規定了客戶端對服務器資源的操作類型,核心方法及語義如下:

方法語義冪等性(多次請求結果一致)安全性(不修改服務器資源)常見場景
GET獲取資源訪問頁面、查詢數據(如/user?id=1
POST提交資源(創建/修改)登錄、上傳文件、提交表單
PUT全量更新資源修改用戶信息(如/user/1,覆蓋全字段)
DELETE刪除資源刪除數據(如/user/1
HEAD獲取資源頭部(無體)檢查資源是否存在(如文件大小)
OPTIONS詢問服務器支持的方法CORS預檢請求(跨域時)
PATCH部分更新資源修改用戶昵稱(僅傳nickname字段)

關鍵區別GET請求的參數會拼在URL中(如/search?keyword=test),長度有限且暴露隱私;POST參數在請求體中,更安全且支持大數據傳輸。

4.2 HTTP狀態碼:定義“服務器的處理結果”

狀態碼是服務器返回的3位數字,用于告知客戶端請求的處理狀態,分為5大類:

1xx 信息性狀態碼(臨時響應)
  • 100 Continue:服務器已接收請求頭,客戶端可繼續發送請求體(常用于大文件上傳)。
2xx 成功狀態碼(請求已處理)
  • 200 OK:請求成功,響應體為資源內容(最常見狀態碼);
  • 204 No Content:請求成功,但無響應體(如DELETE刪除成功);
  • 206 Partial Content:部分請求成功(用于斷點續傳,如視頻分片下載)。
3xx 重定向狀態碼(需進一步操作)
  • 301 Moved Permanently:資源永久遷移,瀏覽器會緩存新地址(如舊域名跳轉新域名);
  • 302 Found:資源臨時遷移,不緩存新地址(如登錄后跳轉首頁);
  • 304 Not Modified:資源未修改,客戶端直接使用本地緩存(關鍵緩存狀態碼);
  • 307 Temporary Redirect:與302類似,但嚴格保持請求方法(如POST不會轉為GET)。
4xx 客戶端錯誤狀態碼(請求有誤)
  • 400 Bad Request:請求格式錯誤(如JSON語法錯誤);
  • 401 Unauthorized:請求未授權(需登錄,響應頭會提示認證方式);
  • 403 Forbidden:請求已授權,但無訪問權限(如普通用戶訪問管理員頁面);
  • 404 Not Found:資源不存在(最常見錯誤,如URL路徑錯誤);
  • 405 Method Not Allowed:請求方法不支持(如用GET訪問僅支持POST的接口)。
5xx 服務器錯誤狀態碼(服務器故障)
  • 500 Internal Server Error:服務器內部錯誤(如代碼bug、數據庫崩潰);
  • 502 Bad Gateway:網關錯誤(如Nginx反向代理時,后端服務器無響應);
  • 503 Service Unavailable:服務器暫時不可用(如維護中,通常會返回Retry-After頭告知重試時間);
  • 504 Gateway Timeout:網關超時(后端服務器處理時間過長)。

4.3 HTTP頭字段:傳遞“額外元信息”

頭字段是請求/響應中鍵值對的集合,用于傳遞客戶端、服務器、資源的元信息,核心頭字段分類如下:

  • 通用頭:請求和響應都可使用,如Date(時間)、Cache-Control(緩存控制);
  • 請求頭:僅客戶端發送,如User-Agent(客戶端標識)、Cookie(會話信息)、Accept(可接收的媒體類型);
  • 響應頭:僅服務器發送,如Server(服務器標識)、Set-Cookie(設置Cookie)、Location(重定向地址);
  • 實體頭:描述請求體/響應體,如Content-Type(數據類型)、Content-Length(數據長度)、ETag(資源指紋)。

5. HTTP的核心痛點與優化:緩存、安全與跨域

5.1 HTTP緩存:提升性能的關鍵

HTTP緩存是減少重復請求、降低服務器壓力、加快頁面加載的核心機制,分為強緩存協商緩存

強緩存(本地緩存,無需發請求)

Cache-ControlExpires頭控制:

  • Cache-Control: max-age=3600:資源在本地緩存3600秒(1小時),期間無需請求服務器;
  • Expires: Wed, 29 Aug 2025 12:00:00 GMT:HTTP/1.0的緩存頭,指定資源過期時間(優先級低于Cache-Control)。

若緩存未過期,瀏覽器直接使用本地資源,控制臺會顯示“200 OK (from disk cache)”。

協商緩存(需發請求,驗證資源是否更新)

若強緩存過期,客戶端會發送請求到服務器,通過以下頭字段驗證資源是否變化:

  • Last-Modified + If-Modified-Since:基于資源修改時間。服務器返回Last-Modified: Wed, 28 Aug 2024 10:00:00 GMT,客戶端下次請求時攜帶If-Modified-Since: 相同時間,服務器若判斷資源未修改則返回304;
  • ETag + If-None-Match:基于資源內容指紋(如MD5)。服務器返回ETag: "abc123",客戶端下次請求攜帶If-None-Match: "abc123",服務器若指紋一致則返回304(優先級高于時間驗證,避免“修改時間變但內容不變”的誤判)。

5.2 HTTP的安全缺陷與HTTPS

HTTP的核心安全問題是明文傳輸:請求/響應內容在網絡中以文本形式傳輸,可被中間人竊聽(如獲取密碼)、篡改(如修改支付金額)、偽造(如冒充服務器)。

為解決此問題,HTTPS(HTTP Secure)應運而生:在HTTP與TCP之間增加TLS/SSL加密層,實現三大安全目標:

  • 機密性:通過對稱加密(如AES)加密數據,僅客戶端和服務器有密鑰;
  • 完整性:通過哈希算法(如SHA-256)驗證數據,防止篡改;
  • 身份認證:通過CA證書驗證服務器身份,防止偽造。

HTTPS已成為當前Web的標配,所有涉及隱私(如登錄、支付)的場景必須使用。

5.3 跨域與CORS:HTTP的跨源通信方案

由于瀏覽器的“同源策略”(協議、域名、端口三者一致為同源),非同源的客戶端無法直接訪問服務器資源(如http://a.com的頁面無法請求http://b.com的接口),這就是跨域問題

HTTP通過CORS(跨域資源共享) 機制解決跨域,核心是服務器返回特定響應頭,允許客戶端跨域訪問:

  • Access-Control-Allow-Origin: http://a.com:允許a.com的跨域請求(*表示允許所有域名);
  • Access-Control-Allow-Methods: GET, POST, PUT:允許的請求方法;
  • Access-Control-Allow-Credentials: true:允許客戶端攜帶Cookie跨域;
  • Access-Control-Allow-Headers: Content-Type:允許的自定義請求頭。

對于“非簡單請求”(如POST請求的Content-Type: application/json),客戶端會先發送OPTIONS預檢請求,確認服務器允許跨域后再發送真實請求。

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

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

相關文章

【qml-7】qml與c++交互(自動補全提示)

背景&#xff1a; 【qml-5】qml與c交互&#xff08;類型單例&#xff09; 之前記錄過qml與c交互的方式&#xff0c;目前為止我使用的是“類型單例”方式。這些名字是我自己起的&#xff0c;只為說明問題&#xff0c;嚴謹的還是以手冊為準。 “類型單例”方式時提到過自動補全…

網頁提示UI操作-適應提示,警告,信息——仙盟創夢IDE

代碼<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>原生動態提示框</title><style>…

第八篇 永磁同步電機控制-MTPA、MTPV

永磁同步電機控制系列課程&#xff1a; 第一篇 永磁同步電機控制-認識電機 第二篇 永磁同步電機控制-電機的分類 第三篇 永磁同步電機控制-硬件基礎知識 第四篇 永磁同步電機控制-軟件基礎知識 第五篇 永磁同步電機控制-數學模型 第六篇 永磁同步電機控制-控制方法 第七…

JAVA:Spring Boot 集成 Temporal 實現訂單處理系統

?? 1、簡述 在現代分布式系統中,訂單處理涉及多步驟工作流(如庫存扣減、支付確認、物流派單等)。為了確保這些步驟的 可靠性、可觀測性 和 容錯性,我們可以使用 Temporal 實現工作流管理。 本文將介紹如何在 Spring Boot 中集成 Temporal,并通過一個訂單處理的實際案例…

服務器硬件電路設計之 SPI 問答(六):如何提升服務器硬件電路中的性能?如何強化穩定性?

在服務器 SPI 硬件設計中&#xff0c;通信性能&#xff08;如傳輸速率、數據吞吐量&#xff09;與穩定性&#xff08;抗干擾、誤碼率&#xff09;直接決定外設響應效率&#xff0c;需從硬件設計、參數配置、干擾抑制三方面系統優化。一、性能優化核心策略&#xff1a;根據 SPI …

Web 聊天室消息加解密方案詳解

目錄 ?編輯 一、Web 聊天室消息加解密需求與技術約束 1.1 核心安全需求 1.2 技術約束 二、主流消息加解密方案詳解 2.1 方案 1&#xff1a;對稱加密&#xff08;AES-256-GCM&#xff09; 2.1.1 方案概述 2.1.2 核心原理 2.1.3 實現步驟&#xff08;分場景&#xff09…

組合導航 | RTK、IMU與激光雷達組合導航算法:原理、實現與驗證

RTK、IMU與激光雷達組合導航算法:原理、實現與驗證 文章目錄 RTK、IMU與激光雷達組合導航算法:原理、實現與驗證 一、組合導航系統原理與數學模型 1.1 傳感器特性與互補性分析 1.2 系統狀態方程構建 1.3 多源觀測方程設計 (1)RTK觀測模型 (2)激光雷達觀測模型 (3)多源觀…

使用Cadence工具完成數模混合設計流程簡介

眾所周知&#xff0c;Cadence的Virtuoso是模擬設計領域的核心工具&#xff0c;市占率達到75%&#xff0c;隨著近些年來Cadence在數字版圖設計&#xff08;APR&#xff09;領域的崛起&#xff0c;invs&#xff0c;PVS等一眾工具也都成了很多公司的首選后端流程工具。依照強強聯合…

FunASR人工智能語音轉寫服務本地部署測試

前提條件&#xff1a;本機&#xff1a;windows11 &#xff0c;已安裝docker1.下載鏡像使用命令下載docker鏡像docker pull registry.cn-hangzhou.aliyuncs.com/funasr_repo/funasr:funasr-runtime-sdk-online-cpu-0.1.13下載完成后&#xff0c;建立文件夾儲存之后需要下載的模型…

Python OpenCV圖像處理與深度學習

Python OpenCV圖像處理與深度學習 1. Python OpenCV入門&#xff1a;圖像處理基礎 2. Python OpenCV開發環境搭建與入門 3. Python OpenCV圖像處理基礎 4. Python OpenCV視頻處理入門 5. Python OpenCV圖像幾何變換入門 6. Python OpenCV圖像濾波入門 7. Python OpenCV邊緣檢測…

C# SIMD編程實踐:工業數據處理性能優化案例

性能奇跡的開始 想象一下這樣的場景&#xff1a;一臺精密的工業掃描設備每次檢測都會產生200萬個浮點數據&#xff0c;需要我們計算出最大值、最小值、平均值和方差來判斷工件是否合格。使用傳統的C#循環處理&#xff0c;每次計算需要幾秒鐘時間&#xff0c;嚴重影響生產線效率…

XHR 介紹及實踐

What is it? XML(XMLHttpRequest) 是瀏覽器提供的一種用于前端頁面和后端服務器進行異步通信的編程接口。它允許在不重新加載整個頁面的情況下&#xff0c;與服務器交換數據并更新部分頁面內容&#xff0c;是 AJAX 技術的核心。 What is it used for? 異步請求&#xff1a;在…

【量化回測】backtracker整體架構和使用示例

backtrader整體框架 backtrader 是一個量化回測的庫&#xff0c;支持多品種、多策略、多周期的回測和交易。更重要的是可以集成 torch 等神經網絡分析模塊。Cerebro類是 backtrader 的核心。Strategy類、Broker和Sizer類都是由Cerebro類實例化而來。 整體流程 backtrade 自帶的…

【python+requests】一鍵切換測試環境:Windows 下環境變量設置指南

一鍵切換測試環境&#xff1a;Windows 下環境變量設置指南教你如何通過一個命令讓測試腳本自動識別不同環境的配置文件你是否遇到過這種情況&#xff1a;同一套測試腳本&#xff0c;需要在測試環境、開發環境、預發布環境、生產環境等多種配置中切換&#xff1f;每次都要手動修…

備份壓縮存儲優化方案:提升效率與節省空間的完整指南

在數字化時代&#xff0c;數據備份已成為企業運營的關鍵環節。本文將深入探討備份壓縮存儲優化方案&#xff0c;從技術原理到實施策略&#xff0c;為您提供一套完整的存儲空間節省與性能提升解決方案。我們將分析不同壓縮算法的適用場景&#xff0c;揭示存儲架構優化的關鍵技巧…

【圖像算法 - 25】基于深度學習 YOLOv11 與 OpenCV 實現人員跌倒識別系統(人體姿態估計版本)

摘要&#xff1a; 本文將詳細介紹如何利用先進的深度學習目標檢測算法 YOLOv11 結合 OpenCV 計算機視覺庫&#xff0c;構建一個高效、實時的人員跌倒識別系統。跌倒檢測在智慧養老、安防監控、工業安全等領域至關重要。我們將從環境搭建、數據準備、模型訓練到跌倒行為判斷邏輯…

數據結構--棧(Stack) 隊列(Queue)

一、棧&#xff08;Stack&#xff09;1. 棧的定義棧&#xff08;Stack&#xff09;是一種 先進后出&#xff08;LIFO, Last In First Out&#xff09; 的數據結構。就像一摞書&#xff1a;最后放的書最先拿走。2. 棧的常用方法&#xff08;Stack 類&#xff09;Stack<E> …

FART 主動調用組件深度解析:破解 ART 下函數抽取殼的終極武器

版權歸作者所有&#xff0c;如有轉發&#xff0c;請注明文章出處&#xff1a;https://cyrus-studio.github.io/blog/ FART 的主動調用組件 在 Android 逆向與脫殼領域&#xff0c;早期的自動化脫殼方案&#xff08;如 DexHunter、FUPK3&#xff09;主要運行在 Dalvik 環境&…

基于有限元分析法的熱壓成型過程中結構變形和堆積matlab模擬與仿真

目錄 1.程序功能描述 2.測試軟件版本以及運行結果展示 3.部分程序 4.算法理論概述 5.完整程序 1.程序功能描述 在壓印過程中&#xff0c;一般情況下&#xff0c;我們遵循質量&#xff0c;動量和能量守恒的原則進行仿真。然后建立偏微分方程組&#xff0c;然后通過有限元的…

CF每日3題(1500-1600)

1809C 神必構造題 對子數組的和考慮使用前綴和&#xff0c;發現逆序對的規律&#xff0c;構造1797C 神奇交互題 需要找特殊的點確定位置2132D 神奇數位題 需要用二分logk優化復雜度&#xff0c;把數位轉換成能到的上限數aim 1809C 構造 前綴和 逆序對 思維 排序 1500 /* 神必構…