HTTP由淺入深

文章目錄

      • 概述
        • 特點
        • URL
      • HTTP 與 HTTPS
        • 概述
        • HTTP 工作原理
        • HTTPS 的作用
        • 區別總結
      • 請求報文
        • 請求行
        • 常見請求方法
        • 請求頭
        • 請求體
          • Content-Type 詳解
          • 常見場景 Content-Type 對應關系
      • 響應報文
        • 響應行
          • 狀態碼詳解
            • 1xx:信息響應(Informational)
            • 2xx:成功(Success)
            • 3xx:重定向(Redirection)
            • 4xx:客戶端錯誤(Client Error)
            • 5xx:服務器錯誤(Server Error)
        • 響應頭
            • 常見響應頭字段
        • 響應體
      • 參考文章

概述

超文本傳輸協議(HTTP, Hypertext Transfer Protocol) 是一種用于傳輸超媒體文檔(例如 HTML)的應用層協議。它最初被設計用于 Web 瀏覽器與 Web 服務器之間的通信,但也廣泛應用于其他客戶端與服務器的交互。

HTTP 遵循經典的[客戶端-服務器(Client-Server)模型:客戶端發起請求,服務器處理并返回響應。HTTP 是一種無狀態協議,即服務器在兩個請求之間不保留任何狀態信息。

特點
  1. 簡單快速:客戶端向服務器請求服務時,僅需發送請求方法和路徑。常用的方法有 GET、HEAD、POST 等。由于協議本身結構簡單,HTTP 服務器實現輕量,通信速度較快。
  2. 靈活:HTTP 允許傳輸任意類型的數據,通過 Content-Type 頭來標識傳輸的數據類型。
  3. 無連接:HTTP 的無連接性指每次請求完成后,客戶端與服務器的連接就會斷開。這種方式有助于節省服務器資源,提升處理效率。
  4. 無狀態:HTTP 協議本身不記錄請求之間的狀態信息。如果需要在多個請求之間保留用戶狀態,通常通過 Cookie、Session、Token 等機制實現。無狀態的好處是服務器響應更快,但也帶來了開發上的額外工作。
  5. 支持 B/S 和 C/S 模式:HTTP 既可用于瀏覽器/服務器(Browser/Server)架構,也適用于客戶端/服務器(Client/Server)通信,因而應用廣泛。
URL

HTTP 使用統一資源標識符(URI, Uniform Resource Identifier)來標識和定位資源。**URL(Uniform Resource Locator,統一資源定位符)**是 URI 的一種形式,包含了訪問某個資源所需的完整信息。

下面通過一個新的 URL 示例來說明其組成部分:

https://example.com:8443/docs/tutorial/index.html?user=alice&lang=zh#section2

這個 URL 可以分為以下幾個部分:

  1. 協議(Scheme)https
    指明使用的協議是 HTTPS,即 HTTP 的加密版本,保障數據的安全性。
  2. 域名(Host)example.com
    表示服務器的地址,既可以是域名也可以是 IP 地址。
  3. 端口(Port):8443
    指定服務器監聽的端口號。若省略此部分,將使用協議的默認端口(HTTPS 默認為 443)。
  4. 路徑(Path)/docs/tutorial/
    表示服務器上資源的目錄結構,也稱為虛擬目錄。
  5. 文件名(File)index.html
    表示請求的具體資源文件,若省略則通常由服務器返回默認首頁文件。
  6. 查詢參數(Query)?user=alice&lang=zh
    用于向服務器傳遞額外信息。多個參數通過 & 分隔,鍵值對之間用 = 連接。
  7. 錨點(Fragment)#section2
    表示頁面中的某個位置(例如跳轉到 HTML 的某個 id),不會參與服務器通信,僅由前端解析處理。

HTTP 與 HTTPS

概述

HTTP(Hypertext Transfer Protocol,超文本傳輸協議)
用于從 Web 服務器傳輸超文本(如 HTML 文件、圖片、視頻等)到客戶端瀏覽器,是一種基于 TCP/IP 的請求-響應協議,默認端口為 80

HTTPS(Hypertext Transfer Protocol Secure,超文本傳輸安全協議)
是 HTTP 的安全版本,在 HTTP 的基礎上增加了 SSL/TLS 加密機制,提供數據加密、完整性校驗和身份驗證,默認端口為 443

HTTP 工作原理

HTTP 使用“客戶端 - 服務器”模型工作:

  1. 客戶端發起請求:瀏覽器等客戶端向服務器發起 HTTP 請求;
  2. 服務器處理請求:服務器解析請求、讀取資源或處理業務邏輯;
  3. 服務器返回響應:返回 HTML 頁面、圖片、JSON 數據等內容;
  4. 客戶端渲染頁面:瀏覽器接收響應并渲染出完整頁面。

常見的 Web 服務器有:ApacheNginxIIS(Internet Information Services) 等。

HTTP 的三個特性:

  • 無連接:每次請求/響應后即斷開連接;
  • 無狀態:服務器不保存任何關于客戶端的會話狀態;
  • 媒體獨立:只要客戶端和服務器能識別 MIME 類型,任何格式的數據都可通過 HTTP 傳輸。
HTTPS 的作用

HTTPS 通過 SSL/TLS 協議 提供如下安全保障:

  • 加密傳輸:防止數據被第三方竊聽;
  • 數據完整性:防止傳輸過程中的數據被篡改;
  • 身份驗證:確保數據是從真實的服務器發出的。

HTTPS 的信任依賴于操作系統中預裝的 CA(證書頒發機構)

  • 瀏覽器需要信任 CA;
  • 服務器必須使用有效的證書;
  • 證書必須匹配訪問的域名;
  • 協議加密過程必須完整并有效。
區別總結
對比維度HTTPHTTPS
是否加密明文傳輸SSL/TLS 加密傳輸
端口號80443
安全性不安全,易被監聽或篡改安全,具備加密、認證與完整性校驗功能
證書要求無需證書需部署 SSL 證書
性能較快,無加密開銷稍慢,有加解密過程
SEO 影響可能被降權更受搜索引擎優待
瀏覽器提示顯示“不安全”顯示“安全鎖”
成本免費需購買或申請 SSL 證書
適用場景非敏感信息傳輸場景(如新聞博客)涉及隱私或敏感信息(如電商、登錄等)

請求報文

HTTP 請求報文由三部分組成:

  1. 請求行(Request Line)

  2. 請求頭(Request Header)

  3. 請求體(Request Body,可選)

    請求報文示例

GET / HTTP/1.1                 # 請求方法為GET,請求首頁(/),使用HTTP/1.1協議
Host: baidu.com               # 指定目標主機(域名)
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Chrome/124.0.6367.60# 瀏覽器類型和操作系統信息
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8# 客戶端可接收的內容類型
Accept-Encoding: gzip, deflate, br# 支持的內容壓縮編碼方式(節省帶寬)
Accept-Language: zh-CN,zh;q=0.9# 客戶端可接受的語言
Connection: keep-alive        # 表示使用長連接,保持 TCP 連接不斷開
Cookie: BIDUPSID=...; BAIDUID=...; ...# 攜帶的 Cookie,用于身份識別、會話保持等
請求行

格式如下:

請求方法 請求資源路徑 協議版本

示例:

POST /chapter17/user.html HTTP/1.1

常見請求方法
方法說明
GET請求數據附在 URL 中;不安全,有長度限制;無請求體
POST數據放在請求體中;適用于表單提交、上傳等場景
HEAD只請求響應頭,不返回實體內容
PUT用于更新或上傳資源
DELETE請求服務器刪除資源
OPTIONS返回服務器支持的請求方法
TRACE回顯服務器收到的請求(用于測試和診斷)
CONNECT用于建立網絡隧道(主要用于 HTTPS)
請求頭

請求頭用于描述客戶端環境和請求內容,常見字段如下:

Header 字段說明
Host請求主機名
User-Agent客戶端軟件信息
Accept可接受的內容類型
Content-Type請求體數據類型
Content-Length請求體的字節長度
Cookie客戶端存儲的 cookie 數據
Referer發起請求的源頁面地址
請求體

請求體通常包含實際發送的數據,僅 POST、PUT 等方法使用。GET 方法沒有請求體。

Content-Type 詳解

Content-Type 指定了請求體中數據的類型。以下是常見類型說明:

Content-Type說明
text/plain純文本格式
text/htmlHTML 格式
text/cssCSS 格式
text/javascriptJavaScript 格式
image/gifGIF 圖片
image/jpegJPEG 圖片
image/pngPNG 圖片
application/x-www-form-urlencoded表單默認格式,key=value&key2=value2
application/jsonJSON 格式,常用于 API 請求
multipart/form-data用于表單上傳文件
text/xml以 XML 格式提交數據
application/octet-stream任意二進制數據流,如文件下載/上傳
常見場景 Content-Type 對應關系
場景請求方法Content-Type
普通表單提交POSTapplication/x-www-form-urlencoded
上傳文件POSTmultipart/form-data
提交 JSON 數據POSTapplication/json
REST 接口 PUT 請求PUTapplication/json 或其他格式
下載文件GETapplication/octet-stream

響應報文

HTTP 響應報文由三部分組成:

  1. 響應行(Status Line)
  2. 響應頭(Response Header)
  3. 響應體(Response Body)

響應報文示例

HTTP/2 200 OK                    # 響應協議版本為HTTP/2,狀態碼200表示請求成功
Server: JSP3/2.0.14              # 服務器軟件及版本信息
Date: Fri, 16 May 2025 07:59:09 GMT  # 響應生成時間(GMT格式)
Content-Type: text/javascript; charset=utf-8# 響應內容的類型為JavaScript,字符編碼為utf-8
Expires: Mon, 16 Sep 2024 07:12:27 GMT# 資源過期時間(一般用于緩存)
Last-Modified: Thu, 12 Sep 2024 08:43:04 GMT# 資源最后修改時間
Etag: "63487d8c50e44137f8b6ce2a04407f8f"# 資源的唯一標識(方便緩存和驗證)
Cache-Control: max-age=31536000# 緩存控制,表示資源最大緩存時間為31536000秒(1年)
Age: 621073                     # 資源在緩存中已經存在的秒數
Accept-Ranges: bytes            # 支持客戶端的范圍請求(斷點續傳)
Content-Md5: Y0h9jFDkQTf4ts4qBEB/jw==# 響應內容的MD5校驗值(完整性校驗)
X-Cache-Status: HIT             # 緩存命中,表示資源來自緩存
Timing-Allow-Origin: *          # 允許任何源訪問資源加載時間數據(用于性能分析)
Access-Control-Allow-Origin: * # 允許跨域訪問,任何域都可以訪問此資源
// 以下是響應體示例(JavaScript代碼)
define("@baidu/aging-tools-pc/dist/index",["san","tslib"],function(n,t){function e(n){if(o[n])return o[n].exports;var t=o[n]={i:n,l:!1,exports:{}};return i[n].call(t.exports,t,t.exports,e),t.l=!0,t.exports}// 省略后續代碼
})
響應行

格式如下:

HTTP/協議版本 狀態碼 狀態描述

示例:

HTTP/1.1 200 OK

狀態碼詳解

HTTP 狀態碼由 3 位數字組成,第一個數字表示響應的類別:

1xx:信息響應(Informational)
  • 100 Continue:繼續請求
  • 101 Switching Protocols:切換協議
2xx:成功(Success)
  • 200 OK:請求成功
  • 204 No Content:請求成功但無響應體,常用于無需頁面刷新的請求
  • 206 Partial Content:部分內容響應,用于支持范圍請求(Content-Range)
3xx:重定向(Redirection)
  • 301 Moved Permanently:永久重定向
  • 302 Found:臨時重定向
  • 303 See Other:重定向到另一個地址,要求使用 GET 請求
  • 307 Temporary Redirect:臨時重定向,不會更改請求方法(如 POST 不變)
  • 304 Not Modified:資源未修改,使用緩存(與條件請求有關)
4xx:客戶端錯誤(Client Error)
  • 400 Bad Request:語法錯誤,服務器無法理解
  • 401 Unauthorized:未授權,需要身份驗證(需帶 WWW-Authenticate 響應頭)
  • 403 Forbidden:服務器拒絕請求
  • 404 Not Found:請求資源不存在
  • 415 Unsupported Media Type:請求類型不支持
5xx:服務器錯誤(Server Error)
  • 500 Internal Server Error:服務器內部錯誤
  • 503 Service Unavailable:服務器暫時無法處理請求
響應頭

響應頭是由服務器返回的鍵值對,用于說明響應信息及控制客戶端行為。

常見響應頭字段
字段名描述
Location重定向地址,需與 3xx 狀態碼搭配使用
Content-Type響應體的數據類型,如 text/html;charset=UTF-8
Content-Disposition文件下載方式,如 attachment;filename=xx.zip
Set-Cookie設置客戶端 Cookie
Content-Encoding響應體的壓縮方式,如 gzip
Content-Length響應體的字節長度
Refresh定時刷新頁面,如 3;url=http://example.com
Server服務器信息,如 Apache-Coyote/1.1(可配置)
Last-Modified響應資源的最后修改時間
Cache-Control緩存控制,如 privatepublicno-cachemax-age=秒數no-store
響應體

響應體是服務器真正發送給客戶端的“正文”內容,通常為 HTML 頁面、JSON 數據、圖片或其他資源。

瀏覽器將響應體加載到內存后,進行解析、渲染并展示頁面內容。

參考文章

  1. http中文文檔(https://developer.mozilla.org/zh-CN/docs/Web/HTTP)
  2. HTTP/HTTPS 簡介(https://www.runoob.com/http/http-intro.html)
  3. Http協議詳解(深入理解)(https://blog.csdn.net/weixin_38087538/article/details/82838762)

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

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

相關文章

Redis淘汰策略

Redis有八種淘汰策略 noeviction :不進行淘汰,直接報錯。allkeys-lru :隨機淘汰最久未使用的鍵。volatile-lru :從設置了過期時間的鍵中,隨機淘汰最久未使用的鍵。allkeys-random :隨機淘汰某個鍵。volati…

Maven打包SpringBoot項目,因包含SpringBootTest單元測試和Java預覽版特性導致打包失敗

SpringBoot啟用Java預覽版特性&#xff08;無測試類&#xff09; 在pom.xml文件中加入以下配置表示啟用Java預覽版 <plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration>…

Makefile快速入門

簡介?&#xff1a; ? Makefile? 是一種用于自動化構建和管理軟件項目的工具文件&#xff0c;通常與 make 命令配合使用。它通過定義?規則?&#xff08;rules&#xff09;來指定如何從源文件生成目標文件&#xff08;如可執行程序或庫&#xff09;&#xff0c;并自動…

RISC-V 開發板 MUSE Pi Pro OpenCV結合Gstreamer實時顯示CSI攝像頭

視頻講解&#xff1a;RISC-V 開發板 MUSE Pi Pro OpenCV結合Gstreamer實時顯示CSI攝像頭_嗶哩嗶哩_bilibili RISC-V 開發板 MUSE Pi Pro OpenCV結合Gstreamer實時顯示CSI攝像頭 安裝opencv相關庫 sudo apt install libopencv-dev python3 python3-opencv 測試使用的CSI攝像頭…

如何用JAVA手寫一個Tomcat

一、初步理解Tomcat Tomcat是什么&#xff1f; Tomcat 是一個開源的 輕量級 Java Web 應用服務器&#xff0c;核心功能是 運行 Servlet/JSP。 Tomcat的核心功能&#xff1f; Servlet 容器&#xff1a;負責加載、實例化、調用和銷毀 Servlet。 HTTP 服務器&#xff1a;監聽端口…

短劇系統開發與抖音生態融合:短視頻時代的新風口與商業機遇

在短視頻內容井噴的時代&#xff0c;“短劇”作為一種新興內容形態&#xff0c;正以驚人的速度搶占用戶注意力。抖音、快手等平臺日均播放量破億的短劇作品&#xff0c;不僅催生了新的內容創作風口&#xff0c;更推動了短劇系統開發的巨大市場需求。本文將深度解析短劇系統開發…

《云原生安全攻防》-- K8s日志審計:從攻擊溯源到安全實時告警

當K8s集群遭受入侵時&#xff0c;安全管理員可以通過審計日志進行攻擊溯源&#xff0c;通過分析攻擊痕跡&#xff0c;我們可以找到攻擊者的入侵行為&#xff0c;還原攻擊者的攻擊路徑&#xff0c;以便修復安全問題。 在本節課程中&#xff0c;我們將介紹如何配置K8s審計日志&am…

3dczml時間動態圖型場景

在cesium中我們了可以使用czml數據來生成可以隨時間變化而變化的物體. 首先導入czml數據 設置時間范圍 id: "point" //物體在什么時間范圍可用 availability:"2012-08-04T16:00:00Z/2012-08-04T16:05:00Z"position:{ //設置物體的起始時間 epoch:"…

超小多模態視覺語言模型MiniMind-V 訓練

簡述 MiniMind-V 是一個超適合初學者的項目&#xff0c;讓你用普通電腦就能訓一個能看圖說話的 AI。訓練過程就像教小孩&#xff1a;先準備好圖文材料&#xff08;數據集&#xff09;&#xff0c;教它基礎知識&#xff08;預訓練&#xff09;&#xff0c;再教具體技能&#xf…

01-jenkins學習之旅-window-下載-安裝-安裝后設置向導

1 jenkins簡介 百度百科介紹&#xff1a;Jenkins是一個開源軟件項目&#xff0c;是基于Java開發的一種持續集成工具&#xff0c;用于監控持續重復的工作&#xff0c;旨在提供一個開放易用的軟件平臺&#xff0c;使軟件項目可以進行持續集成。 [1] Jenkins官網地址 翻譯&…

VPLC (VPLCnext) K8S

前序 在接觸Virtual PLCnext Control的時候&#xff0c;我想過好幾次如何將它運行在k8s上&#xff0c;由于對k8s的熟悉程度不夠&#xff0c;跌跌撞撞嘗試了很久&#xff0c;終于把vPLC部署在單機版的k8s上了。&#xff08;此教程僅為demo階段&#xff0c;此教程僅為demo階段&a…

OPC Client第5講(wxwidgets):初始界面的事件處理;按照配置文件初始化界面的內容

接上一講&#xff0c;即實現下述界面的事件處理代碼&#xff1b;并且按照配置文件初始化界面的內容&#xff08;三、&#xff09; 事件處理的基礎知識&#xff0c;見下述鏈接五、 OPC Client第3講&#xff08;wxwidgets&#xff09;&#xff1a;wxFormBuilder&#xff1b;基礎…

從乳制品行業轉型看智能化升級新機遇——兼談R2AIN SUITE的賦能實踐

一、市場現狀&#xff1a;乳制品行業迎來智能化轉型關鍵期 中國乳制品行業在經歷高速增長與深度調整后&#xff0c;已進入以"安全、效率、創新"為核心的新發展階段。根據施耐德電氣白皮書數據顯示&#xff0c;2019年乳制品合格率達99.8%[1]&#xff0c;液態奶占據77…

[20250522]目前市場上主流AI開發板及算法盒子的芯片配置、架構及支持的AI推理框架的詳細梳理

目前市場上主流AI開發板及算法盒子的芯片配置、架構及支持的AI推理框架的詳細梳理

【Golang筆記03】error、panic、fatal錯誤處理學習筆記

Golang筆記&#xff1a;錯誤處理學習筆記 一、進階學習 1.1、錯誤&#xff08;異常處理&#xff09; Go語言中也有和Java中的異常處理相關的機制&#xff0c;不過&#xff0c;在Go里面不叫異常&#xff0c;而是叫做&#xff1a;錯誤。錯誤分為三類&#xff0c;分別是&#x…

Python可視化設計原則

在數據驅動的時代&#xff0c;可視化不僅是結果的呈現方式&#xff0c;更是數據故事的核心載體。Python憑借其豐富的生態庫&#xff08;Matplotlib/Seaborn/Plotly等&#xff09;&#xff0c;已成為數據可視化領域的主力工具。但工具只是起點&#xff0c;真正讓圖表產生價值的&…

??WPF入門與XAML基礎:從零開始構建你的第一個WPF應用?

從零開始構建你的第一個WPF應用? 1.什么是WPF&#xff1f;??2.開發環境搭建??2.1 安裝Visual Studio??2.2 創建第一個WPF項目?? 3. WPF項目結構解析????3.1 MainWindow.xaml??3.2 MainWindow.xaml.cs?? 4. XAML基礎語法??4.1 屬性賦值方式??4.2 命名空間&…

電子電氣架構 --- 下一代汽車電子電氣架構中的連接性

我是穿拖鞋的漢子,魔都中堅持長期主義的汽車電子工程師。 老規矩,分享一段喜歡的文字,避免自己成為高知識低文化的工程師: 鈍感力的“鈍”,不是木訥、遲鈍,而是直面困境的韌勁和耐力,是面對外界噪音的通透淡然。 生活中有兩種人,一種人格外在意別人的眼光;另一種人無論…

學習日記-day13-5.22

完成目標&#xff1a; 知識點&#xff1a; 1.抽象注意事項 知識點 核心內容 重點 抽象類實例化限制 抽象類不能直接實例化對象&#xff0c;只能創建非抽象子類的對象 嘗試實例化抽象類會觸發編譯錯誤 抽象方法與抽象類關系 抽象類不一定包含抽象方法&#xff0c;但含…

華碩無畏Pro14 2025,打造舒適辦公新體驗

在快節奏、高效率的現代辦公環境中&#xff0c;一臺得心應手的筆記本無疑是每位職場人士的“第二大腦”與核心生產力工具。它不僅需要承載日常工作的繁雜事務&#xff0c;更要在關鍵時刻穩定輸出&#xff0c;助力我們從容應對各種挑戰。 洞悉此需求&#xff0c;華碩推出了全新…