HTTP的“對話”邏輯:請求與響應如何構建數據橋梁?

一、前言

作為現代互聯網通信的基石,HTTP協議定義了客戶端與服務器之間的“對話規則”。每一次網頁加載、API調用或文件傳輸的背后,都離不開精心構造的HTTP請求與響應。請求中封裝了用戶的意圖——從請求方法、資源路徑到提交的數據;響應則承載著服務器的反饋——狀態碼揭示成敗,頭部傳遞元信息,正文返回結果。

理解兩者的結構,不僅是后端開發、接口調試的必備技能,更是優化性能、排查問題的關鍵入口。本文將從報文格式、核心字段到實戰案例,逐層拆解HTTP通信的底層邏輯,助你掌握網絡交互的“第一性原理”。

image?

?

?

二、HTTP 請求結構

HTTP 請求的完整結構

一個標準的 HTTP 請求由以下四部分組成:

[請求行]
[請求頭]
[空行]
[請求體](可選)

image?

?

1. 請求行(Request Line)

作用:請求行是 HTTP 請求的起始部分,它決定了客戶端向服務器請求的類型以及請求的目標資源。通過請求方法、請求 URI 和 HTTP 版本這三個關鍵元素,請求行明確了客戶端的意圖和目標,使得服務器能夠正確地理解和處理請求。

格式<Method> <Request-URI> <HTTP-Version>?

?

組成部分

  1. HTTP 方法(Method)

    • 定義客戶端對資源的操作類型。

    • 常見方法:

      • GET:獲取資源(無請求體)。
      • POST:提交數據(如表單)。
      • PUT:更新整個資源。
      • DELETE:刪除資源。
      • HEAD:獲取響應頭(無響應體)。
      • PATCH:部分更新資源。
      • OPTIONS:查詢服務器支持的HTTP方法。
  2. 請求目標(Request-URI)

    • 標識資源的位置,可以是絕對路徑或完整URL。

    • 示例

      • /index.html?(相對路徑)。
      • http://example.com/api/data?(絕對路徑,常見于代理請求)。
  3. HTTP 版本

    • 指定協議版本,如 HTTP/1.1? 或 HTTP/2?。
    • 影響連接管理、性能優化等特性。

?

示例

GET /api/data?id=123 HTTP/1.1

?

2. 請求頭(Request Headers)

作用:傳遞客戶端信息、請求條件和控制指令。
格式Header-Name: Header-Value?

?

常見請求頭字段

字段名作用
?Host?目標服務器域名(HTTP/1.1 強制要求,用于虛擬主機)。
?User-Agent?客戶端標識(如瀏覽器類型、操作系統)。
?Accept?聲明客戶端可接受的響應數據類型(如 text/html?, application/json?)。
?Content-Type?請求體的數據類型(如 application/json?、multipart/form-data?)。
?Content-Length?請求體的字節長度(POST/PUT 必需)。
?Authorization?身份憑證(如 Bearer <token>?)。
?Cookie?客戶端存儲的會話信息。
?Cache-Control?控制緩存行為(如 no-cache?)。
?Accept-Encoding?支持的壓縮算法(如 gzip?, br?)。

?

Content-Type字段

HTTP 請求頭中的 Content-Type? 字段用于指定請求體的媒體類型(MIME類型) ,幫助服務器正確解析客戶端發送的數據格式。它是處理非 GET 請求(如 POST、PUT、PATCH 等)時的關鍵字段,尤其在 RESTful API 交互中至關重要。


主要作用
  • 數據格式標識:明確告知服務器請求體的數據組織形式(如 JSON、表單、二進制等)。
  • 解析依據:服務器根據 Content-Type? 選擇對應的解析方式(如 JSON 解析器、表單解碼器等)。
  • 兼容性保障:避免因數據格式不明確導致的解析錯誤或安全漏洞。

常見類型及用途

以下是幾種典型的 Content-Type? 值及其適用場景:

類型格式說明使用場景
?application/x-www-form-urlencoded?鍵值對 URL 編碼(如 name=John&age=30?,空格轉為 %20?)HTML 表單默認提交方式(非文件上傳)
?multipart/form-data?多部分數據,用 boundary? 分隔,支持二進制文件表單含文件上傳時使用(需設置 <form enctype="multipart/form-data">?)
?application/json?請求體為 JSON 字符串(如 {"name": "John", "age": 30}?)REST API 交互,前后端 JSON 數據傳輸
?text/plain?純文本數據簡單文本傳輸(較少使用)
?application/xml?XML 格式數據舊系統或特定協議要求的 XML 交互
?application/octet-stream?任意二進制數據流文件下載或上傳未知類型的二進制文件

示例代碼
  1. 表單提交(URL 編碼)

    POST /submit-form HTTP/1.1
    Content-Type: application/x-www-form-urlencodedname=John%20Doe&age=30
    
  2. 文件上傳(multipart)

    POST /upload HTTP/1.1
    Content-Type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxk----WebKitFormBoundary7MA4YWxk
    Content-Disposition: form-data; name="file"; filename="example.jpg"
    Content-Type: image/jpeg(二進制文件數據)
    ----WebKitFormBoundary7MA4YWxk--
    
  3. 發送 JSON 數據

    POST /api/users HTTP/1.1
    Content-Type: application/json{"name": "John", "age": 30}
    

注意事項
  1. 必選性:當請求有 Body 時(如 POST/PUT),必須設置 Content-Type?,否則服務器可能無法解析。
  2. 編碼參數:可附加 charset? 指定字符集(如 Content-Type: text/html; charset=utf-8?)。
  3. 錯誤處理:類型不匹配可能導致 415 Unsupported Media Type? 錯誤。
  4. 工具自動處理:Axios/Fetch 等庫會根據數據自動設置類型(如 JSON 數據自動設為 application/json?),但需注意覆蓋或手動設置。

常見問題
  • Q: 上傳文件時為何必須用 multipart/form-data??
    A: URL 編碼無法處理二進制數據分塊,multipart? 通過 boundary? 分隔多字段/文件。
  • Q: 忘記設置 Content-Type? 會怎樣?
    A: 服務器可能按默認方式(如 text/plain?)解析,導致數據無法正確讀取。
  • Q: 如何調試 Content-Type? 問題?
    A: 使用開發者工具(如 Chrome DevTools)檢查請求頭,確保與實際發送的數據格式一致。

正確設置 Content-Type? 是 HTTP 通信的關鍵步驟,確保數據在客戶端和服務器間高效、準確地傳輸。

?

示例

Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64)
Accept: application/json
Content-Type: application/x-www-form-urlencoded
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

?

3. 空行(Empty Line)

  • 作用:分隔請求頭和請求體。

  • 格式:一個空行(\r\n?)。

  • 示例

    [請求頭結束]
    [空行]
    [請求體開始]
    

?

4. 請求體(Request Body)

作用:攜帶客戶端提交的數據(如表單、文件上傳)。
適用方法:POST、PUT、PATCH 等。

常見數據格式
格式Content-Type 值示例
表單數據?application/x-www-form-urlencoded??username=admin&password=123456?
JSON?application/json??{"name": "Alice", "age": 30}?
文件上傳(多部分表單)?multipart/form-data?分塊傳輸,每部分包含文件內容和元數據。
純文本?text/plain??Hello, World!?

?

示例(JSON 格式)

POST /login HTTP/1.1
Host: example.com
User-Agent: Mozilla/5.0
Accept: application/json
Content-Type: application/json{"username": "john_doe","password": "securepassword"
}

?

5. 完整示例

GET 請求

GET /search?q=http+protocol HTTP/1.1
Host: www.google.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)
Accept: text/html,application/xhtml+xml
Accept-Language: en-US,en;q=0.9
Connection: keep-alive

POST 請求(表單提交)

POST /login HTTP/1.1
Host: api.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 29username=admin&password=123456

?

6. 總結

HTTP 請求的結構設計遵循簡潔性與擴展性原則:

  • 請求行明確操作目標和協議版本。
  • 請求頭傳遞元數據和控制指令。
  • 請求體靈活支持多種數據格式。
    理解其組成及規范,是調試接口、優化性能及保障安全性的基礎。

?

關鍵注意事項

  1. 方法冪等性

    • GET、HEAD、PUT、DELETE 是冪等的(多次執行結果相同)。
    • POST、PATCH 非冪等(可能產生副作用)。
  2. 安全性

    • GET、HEAD、OPTIONS 是安全的(不修改資源)。
    • POST、PUT、DELETE 可能修改資源狀態。
  3. URI 長度限制

    • GET 請求參數通過 URL 傳遞,長度受瀏覽器限制(約 2048 字符)。
    • 長數據應使用 POST 通過請求體傳輸。
  4. 協議版本差異

    • HTTP/1.1 要求 Host? 頭部,支持持久連接。
    • HTTP/2 使用二進制分幀,隱藏了報文文本結構,但邏輯層保持一致。

?

?

三、HTTP 響應結構

HTTP 響應是由服務器返回給客戶端的結構化信息,它包含了客戶端請求的結果以及相關的元數據。HTTP 響應結構主要由三部分組成:狀態行、響應頭和響應體。

image?

?

HTTP 響應也由三部分組成:響應行響應頭部響應體

?

1. 響應行(Response Line)

響應行是 HTTP 響應的第一行,它包含了三個關鍵信息:HTTP 版本、狀態碼和狀態消息。

  • HTTP 版本 :指明服務器使用的 HTTP 協議版本,例如 HTTP/1.1? 或 HTTP/2?。這有助于客戶端了解服務器遵循的協議規范,從而正確解析響應內容。

  • 狀態碼 :是一個三位數字代碼,用于表示服務器對請求的處理結果。狀態碼是 HTTP 響應的核心部分之一,它提供了關于請求成功或失敗的明確信息。常見的狀態碼包括:

    • 200 OK :表示請求成功,服務器已正常處理請求并返回了相應的資源。
    • 404 Not Found :表示請求的資源在服務器上不存在,無法找到。
    • 500 Internal Server Error :表示服務器內部發生錯誤,無法完成請求。
    • 302 Found :表示請求的資源被臨時移動到另一個 URL,客戶端需要進行重定向。
    • 403 Forbidden :表示服務器拒絕了客戶端的請求,通常是因為權限不足或服務器配置問題。
  • 狀態消息 :是對狀態碼的簡要描述,通常是一個短語或句子,用于向人類用戶提供更直觀的反饋。例如,OK?、Not Found?、Internal Server Error? 等。狀態消息通常與狀態碼一起使用,以提供更清晰的響應信息。

?

響應行示例

HTTP/1.1 200 OK

表示HTTP版本是1.1?,狀態碼是200?,狀態描述為OK?,即請求成功。

?

2. 響應頭部(Response Headers)

響應頭是 HTTP 響應中的重要部分,它包含了關于響應的詳細信息,這些信息可以幫助客戶端更好地理解和處理響應內容。響應頭由一系列的鍵值對組成,每個鍵值對都以冒號分隔,例如 Key: Value?。以下是常見的響應頭及其作用:

  • Content-Type :指定響應體的媒體類型(MIME 類型),例如 text/html?、application/json?、image/jpeg? 等。這告訴客戶端如何解析和顯示響應體中的數據。
  • Content-Length :表示響應體的長度(以字節為單位)。客戶端可以使用這個信息來確定響應體是否完整,或者在下載文件時顯示進度條。
  • Server :包含服務器軟件的名稱和版本信息,例如 Apache/2.4.58 (Win64) OpenSSL/3.2.0 PHP/8.3.4?。這可以幫助客戶端了解服務器的運行環境,或者用于調試和分析。
  • Set-Cookie :用于設置客戶端的 Cookie。服務器可以通過這個響應頭向客戶端發送新的 Cookie,或者更新已有的 Cookie。Cookie 通常用于會話管理、用戶認證等。
  • Cache-Control :控制響應的緩存行為,例如 max-age=3600? 表示響應可以在客戶端緩存 3600 秒。這有助于提高性能,減少服務器的負載。
  • Expires :指定響應的過期時間,例如 Thu, 15 Oct 2024 12:00:00 GMT?。客戶端可以使用這個信息來判斷響應是否過期,是否需要重新請求。
  • Last-Modified :表示資源的最后修改時間,例如 Wed, 09 Oct 2024 10:00:00 GMT?。客戶端可以使用這個信息來進行緩存驗證,或者判斷資源是否發生了變化。
  • ETag :提供資源的實體標簽,例如 "1234567890abcdef"?。ETag 是一種用于緩存驗證的機制,客戶端可以在請求頭中發送 If-None-Match? 字段,服務器可以根據 ETag 判斷資源是否發生了變化。

?

響應頭部示例

Content-Type: text/html; charset=UTF-8
Content-Length: 138
Date: Mon, 12 Feb 2025 14:30:00 GMT
Server: Apache/2.4.41 (Unix)

?

3. 響應體(Response Body)

響應體是 HTTP 響應的主體部分,它包含了服務器返回給客戶端的實際數據。響應體的內容和格式取決于響應的類型和目的,例如:

  • HTML 頁面 :如果客戶端請求的是一個網頁,響應體通常是一個 HTML 文檔,包含了網頁的結構、內容和樣式信息。客戶端(通常是瀏覽器)會解析和渲染這個 HTML 文檔,將其顯示為用戶可見的網頁。
  • JSON 數據 :如果客戶端請求的是一個 API 接口,響應體通常是一個 JSON 格式的數據,包含了服務器返回的結果信息。客戶端可以使用 JavaScript 或其他編程語言解析和處理這個 JSON 數據,從而實現動態的功能和交互。
  • 圖像、音頻、視頻等多媒體數據 :如果客戶端請求的是一個多媒體資源,響應體通常是相應的二進制數據。客戶端會根據響應頭中的 Content-Type? 字段來識別數據的類型,并使用相應的軟件或插件進行播放或顯示。
  • 文本文件、PDF 文件等其他類型的數據 :如果客戶端請求的是其他類型的文件,響應體通常是文件的內容。客戶端可以根據響應頭中的 Content-Type? 字段和 Content-Disposition? 字段來判斷如何處理這些文件,例如直接顯示、下載保存等。

?

例如,當請求一個 HTML 頁面時,響應體可能是:

<html><head><title>Example</title></head><body><h1>Welcome to the example page!</h1></body>
</html>

?

4. 完整示例

示例1

以下是一個 HTTP 響應的示例:

HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 1234
Server: Apache/2.4.58 (Win64) OpenSSL/3.2.0 PHP/8.3.4
Set-Cookie: session_id=1234567890; Path=/
Cache-Control: max-age=3600<!DOCTYPE html>
<html>
<head><title>Example Page</title>
</head>
<body><h1>Welcome to the Example Page</h1><p>This is an example of an HTML page returned in the response body.</p>
</body>
</html>

在這個示例中:

  • 狀態行HTTP/1.1 200 OK? 表示服務器使用的是 HTTP/1.1 協議,請求成功,狀態碼為 200,狀態消息為 OK。
  • 響應頭 :包含了多個響應頭字段,例如 Content-Type? 指定了響應體的類型為 text/html?,Content-Length? 指定了響應體的長度為 1234 字節,Server? 指定了服務器的軟件信息,Set-Cookie? 設置了一個新的 Cookie,Cache-Control? 指定了緩存時間為 3600 秒。
  • 響應體 :是一個 HTML 頁面,包含了網頁的結構和內容。客戶端(通常是瀏覽器)會解析和渲染這個 HTML 頁面,將其顯示為用戶可見的網頁。

綜上所述,HTTP 響應結構由狀態行、響應頭和響應體三部分組成,它們共同提供了服務器對客戶端請求的完整響應信息。理解 HTTP 響應結構對于開發和調試 Web 應用程序至關重要,它可以幫助我們更好地理解服務器的行為和客戶端的處理過程。

?

京東

如下為京東商品的一個接口,請求,響應結構示例:

image?

?

?

四、總結

HTTP 請求結構

  • 請求行:包含請求方法、目標資源和協議版本。
  • 請求頭部:包含客戶端信息、請求元數據等。
  • 請求體:在某些方法(如 POST、PUT)中,包含發送給服務器的數據。

HTTP 響應結構

  • 響應行:包含協議版本、狀態碼和狀態描述。
  • 響應頭部:包含響應元數據,如內容類型、長度、服務器信息等。
  • 響應體:包含實際的返回數據,如網頁內容、JSON 數據、文件等。

這種請求與響應結構使得客戶端和服務器之間能夠有效地交換信息,支持 Web 應用程序的構建。

?

HTTP請求與響應構成Web通信的核心框架。請求明確操作目標,響應傳遞結果與狀態。深入理解其結構——從方法、URI到狀態碼、頭部字段——是優化交互效率、精準調試的基石。掌握HTTP的請求和響應結構,不僅對Web開發者至關重要,也有助于優化網絡性能和排查常見的通信問題。

?

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

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

相關文章

安裝 Docker Desktop 修改默認安裝目錄到指定目錄

Docker Desktop安裝目錄設置 Docker Desktop 默認安裝位置 &#xff08;C:\Program Files\Docker\Docker) 是這個 &#xff0c;導致系統盤占用過大&#xff0c;大概2G ; 那么如何安裝到其他磁盤呢&#xff1f; 根據docker desktop 官網 Docker Desktop install 我們可以看到&a…

基于實例詳解pytest鉤子pytest_generate_tests動態生成測試的全過程

關注開源優測不迷路 大數據測試過程、策略及挑戰 測試框架原理&#xff0c;構建成功的基石 在自動化測試工作之前&#xff0c;你應該知道的10條建議 在自動化測試中&#xff0c;重要的不是工具 作為一名軟件開發人員&#xff0c;你一定深知有效測試策略的重要性&#xff0c;尤其…

Kotlin Lambda

Kotlin Lambda 在探索Kotlin Lambda之前&#xff0c;我們先回顧下Java中的Lambda表達式&#xff0c;Java 的 Lambda 表達式是 Java 8 引入的一項強大的功能&#xff0c;它使得函數式編程風格的代碼更加簡潔和易于理解。Lambda 表達式允許你以一種更簡潔的方式表示實現接口&…

C#學習之DataGridView控件

目錄 一、DataGridView控件常用屬性、方法、事件匯總表 1. 常用方法、屬性和事件匯總 二、DataGridView 控件的常用方法調用 1. DataBind() 方法 2. Clear() 方法 3. Refresh() 方法 4. Sort() 方法 5. ClearSelection() 方法 6. BeginEdit() 方法 7. EndEdit() 方法…

本地事務簡介

本地事務簡介 1 事務基本性質 數據庫事務的幾個特性&#xff1a;原子性(Automicity)、一致性(Consistency)、隔離性或獨立性(islation)和持久性(Durability)&#xff0c;簡稱ACID。 原子性&#xff1a;一系列的操作&#xff0c;其整體不可拆分&#xff0c;要么同時成功&#…

PyQt組態軟件 拖拽設計界面測試

PyQt組態軟件測試 最近在研究PyQt,嘗試寫個拖拽設計界面的組態軟件&#xff0c;目前實現的功能如下&#xff1a; 支持拖入控件&#xff0c;鼠標拖動控件位置 拖動控件邊緣修改控件大小支持屬性編輯器&#xff0c;修改當前選中控件的屬性 拖動框選控件&#xff0c;點選控件 控…

軟件評測師復習之計算機網絡(4)

目錄 (一)1.網絡功能和分類2.OSI七層模型3.TCP/IP協議4.傳輸介質(二)1.通信方式和交換方式2.IP地址3.IPv64.網絡規劃與設計5.磁盤冗余陣列6.網絡存儲技術(一) 1.網絡功能和分類 計算機網絡功能:數據通信、資源共享、負載均衡、高可靠性 按分布范圍和拓撲結構劃分: 網絡分類…

機器學習-1:線性回歸

常用的線性回歸模型主要有以下這些 簡單線性回歸多元線性回歸多項式回歸嶺回歸套索回歸彈性網絡回歸逐步回歸 一.簡單的一元線性回歸 1.導入必備的庫 #導入必備的庫 import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.model_selection …

SQL SERVER的PARTITION BY應用場景

SQL SERVER的PARTITION BY關鍵字說明介紹 PARTITION BY關鍵字介紹具體使用場景排名計算累計求和分組求最值分組內百分比計算分組內移動平均計算分組內數據分布統計分組內數據偏移計算 總結 PARTITION BY關鍵字介紹 在SQL SERVER中&#xff0c;關鍵字PARTITION BY主要用于窗口函…

NO.18十六屆藍橋杯備戰|循環嵌套|乘法表|斐波那契|質數|水仙花數|(C++)

循環嵌套 循環嵌套的使? while &#xff0c; do while &#xff0c; for &#xff0c;這三種循環往往會嵌套在?起才能更好的解決問題&#xff0c;就是我們所說的&#xff1a;循環嵌套。這三種循環都可以任意嵌套使? ?如&#xff1a; 寫?個代碼&#xff0c;打印?個乘法?…

leetcode - hot100 - python - 專題一:哈希

1、兩數之和 簡單 題目&#xff1a; 給定一個整數數組 nums 和一個整數目標值 target&#xff0c;請你在該數組中找出 和為目標值 target 的那 兩個 整數&#xff0c;并返回它們的數組下標。你可以假設每種輸入只會對應一個答案&#xff0c;并且你不能使用兩次相同的元素。你可…

JavaEE-SpringBoot快速入門

文章目錄 本節目標Maven什么是Maven創建一個Maven項目maven項目功能maven的依賴管理全球倉庫, 私服, 本地服務器, 配置國內鏡像 第一個SpringBoot項目創建項目運行SpringBoot程序 SpringBoot原理初步Web服務器 總結 本節目標 了解什么是maven, 配置國內源使用Springboot創建項…

【Viper】配置格式與支持的數據源與go案例

Viper 是一個用于 Go 應用程序的配置管理庫&#xff0c;支持多種配置格式和數據源。 安裝依賴 go get github.com/spf13/viper go get github.com/spf13/viper/remote go get go.etcd.io/etcd/client/v3"github.com/spf13/viper/remote"要寫在etcd客戶端import里 1…

【C/C++】后綴表達式 藍橋杯/ACM備賽

核心考點&#xff1a;1.棧的應用 2.字符串處理 題目描述 所謂后綴表達式是指這樣的一個表達式&#xff1a;式中不再引用括號&#xff0c;運算符號放在兩個運算對象之后&#xff0c;所有計算按運算符號出現的順序&#xff0c;嚴格地由左而右新進行&#xff08;不用考慮運算符的…

【AI實踐】deepseek支持升級git

當前Windows 11 WSL的git是2.17&#xff0c;Android Studio提示需要升級到2.19版本 網上找到指導文章 安裝git 2.19.2 cd /usr/src wget https://www.kernel.org/pub/software/scm/git/git-2.19.2.tar.gz tar xzf git-2.19.2.tar.gz cd git-2.19.2 make prefix/usr/l…

QEMU 搭建 Ubuntu x86 虛擬機

1. 安裝 QEMU 在 Ubuntu 系統中&#xff0c;可以通過以下命令安裝 QEMU&#xff1a; sudo apt-get update sudo apt-get install qemu-system-x86_64 qemu-kvm libvirt-daemon libvirt-clients bridge-utils virt-manager2. 創建虛擬硬盤鏡像 qemu-img create -f raw ubuntu…

Linux驅動層學習:Linux 設備樹

設備樹是一種數據結構&#xff0c;包含多個節點&#xff0c;用于描述硬件設備及其配置信息&#xff0c;它通常用于嵌入式系統中&#xff0c;尤其是在Linux操作系統中&#xff0c;幫助操作系統識別和管理硬件資源&#xff0c;設備樹不是代碼&#xff0c;而是一種用數據描述硬件信…

金蝶云星空與釘釘高效數據集成案例分享

金蝶云星空數據集成到釘釘的技術案例分享 在企業信息化系統中&#xff0c;數據的高效流動和實時反饋是提升業務效率的關鍵。本文將聚焦于一個具體的系統對接集成案例&#xff1a;如何將金蝶云星空的數據集成到釘釘&#xff0c;并實現審核狀態的回傳提示。 本次集成方案名為“…

圖形渲染(一)——Skia、OpenGL、Mesa 和 Vulkan簡介

1.Skia —— 2D 圖形庫 Skia 是一個 2D 圖形庫&#xff0c;它的作用是為開發者提供一個高層次的繪圖接口&#xff0c;方便他們進行 2D 圖形渲染&#xff08;比如繪制文本、形狀、圖像等&#xff09;。Skia 本身不直接管理 GPU 或進行底層的渲染工作&#xff0c;而是通過 底層圖…

GIT提錯分支,回滾提交

1. 準備示例 假設我們有三次提交&#xff1a; test1&#xff1a;需要在 master 分支提交test2、test3&#xff1a;需要在 develop 分支提交 遠端線上記錄 2. 步驟 選擇需要回退的記錄&#xff1a; 選中需要回退的 commit&#xff0c;選擇 Reset Current Branch to Here...。…