前端與後端的 HTTP 請求與響應協議

更新日期: 2025 年 1 月 1 日

本文為 Django + Vue 前後端分離解析,第 7 篇

  1. 前後端分離的 404 錯誤處理:步驟指南
  2. 正常網頁與 API 接口:新手指南
  3. GraphQL 與 REST:理解新時代的 API 設計
  4. 為什麼自定義 404 頁面需要同時支持 API 和 HTML:新手指南
  5. 前後端分離中的路由與錯誤處理:新手指南
  6. 設計後端 API 的 404 錯誤處理:新手指南
  7. 前端與後端的 HTTP 請求與響應協議 👈 所在位置
  8. Django 中自定義 404 專案架構的最佳實踐
  9. 深入理解 Django 中的自定義 404 views 函數處理解析
  10. Django 的 handler404:自定義 404 錯誤頁面的核心
  11. Django 的 render 函數與 status 參數:為什麼重要?
  12. 使用 Accept 判斷請求格式:如何實現靈活的錯誤處理?
  13. 使用 Esbuild 搭建 Vue 開發環境的指南
  14. 新手入門:TailwindCSS 與 DaisyUI 的整合指南
  15. Django 靜態文件管理:static 與 staticfiles 完整指南
  16. 使用 WhiteNoise 簡化 Django 靜態文件管理:新手入門指南
  17. Vue 與 Django 整合:從編輯到部署的完整指南
  18. Django 與 Vue 的專案目錄與設計流程指南
  19. Django + Vue 前後端分離架構:後端路由渲染解析
  20. Vue 3 應用的主入口詳解:如何初始化應用
  21. 探索 Vue 應用的根組件:App.vue 的角色與設計
  22. Vue.js 單頁應用(SPA)邏輯與運作流程詳解
  23. 新手指南:使用 Axios 實現高效的 HTTP 請求
  24. 在 Vue 中處理 404 錯誤組件(component)設計:新手指南
  25. Vue Router 新手指南:設置 404 錯誤頁面

當前端與後端通信時,彼此之間的數據傳遞基於 HTTP 請求與響應協議

無論是使用 API 的數據交互,還是直接返回 HTML 頁面,都包含以下兩個關鍵部分:

  1. 請求(Request):前端發送給後端的數據,說明需要執行什麼操作。
  2. 響應(Response):後端回應給前端的數據,提供請求結果。

瞭解請求與響應的格式對於設計高效的前後端通信至關重要。

本文將以簡單易懂的方式,帶你了解 前端請求格式後端響應格式 的基本結構,以及如何根據應用需求決定數據格式。


前端發送的請求格式

請求的組成

一個 HTTP 請求通常由三部分構成:

  1. 請求行(Request Line):描述操作類型、目標資源和協議版本。
    • 示例:POST /api/login HTTP/1.1
  2. 請求頭(Headers):包含元數據,例如數據類型和認證信息。
    • 示例:Content-Type: application/json
  3. 請求體(Body):包含具體的數據內容,僅在需要傳遞數據時使用。
    • 示例:{ "username": "john", "password": "123456" }

常見的請求頭

  • Content-Type:說明請求體的數據格式。
    • 示例:application/json 表示數據是 JSON 格式。
  • Accept:告訴後端希望返回的數據格式。
    • 示例:application/json 表示希望獲取 JSON。

常見的請求體格式

  1. JSON 格式(最常見)
    • 用於結構化數據,簡單且通用。
    • 示例: { "username": "john_doe", "password": "123456" }
  2. 表單格式(URL 編碼)
    • 常用於提交表單數據。
    • 示例: username=john_doe&password=123456
  3. 多部分表單(Multipart Form Data)
    • 用於上傳文件。
    • 示例: ------WebKitFormBoundary Content-Disposition: form-data; name="file"; filename="image.jpg" Content-Type: image/jpeg

請求格式總結

組件說明
請求行HTTP 方法、路徑和協議版本
請求頭Content-TypeAccept 等元數據
請求體JSON、表單數據或多部分數據

後端返回的響應格式

響應的組成

後端回應給前端的 HTTP 響應也包含三部分:

  1. 狀態行(Status Line):描述響應的狀態碼和協議版本。
    • 示例:HTTP/1.1 200 OK
  2. 響應頭(Headers):描述響應內容的元數據。
    • 示例:Content-Type: application/json
  3. 響應體(Body):實際的數據內容。

常見的響應頭

  • Content-Type:說明響應數據的格式。
    • 示例:application/json 表示數據是 JSON 格式。
  • Cache-Control:指定緩存策略。
    • 示例:Cache-Control: no-cache

常見的響應體格式

  1. JSON 格式(最常用)
    • 適合結構化數據,尤其在前後端分離應用中。
    • 示例: { "status": "success", "data": { "id": 1, "name": "John" } }
  2. HTML 格式
    • 適合直接顯示的頁面。
    • 示例: <html> <body> <h1>404 - Page Not Found</h1> </body> </html>
  3. 文本格式
    • 適合簡單的信息提示。
    • 示例:Error: Unauthorized
  4. 二進制數據
    • 用於返回文件或媒體內容,如圖片、音頻等。

響應格式總結

組件說明
狀態行HTTP 協議版本和狀態碼
響應頭Content-Type 和緩存策略等元數據
響應體JSON、HTML、文本或二進制文件

常見的情境示例

情境 1:API 通信(JSON 格式)

  • 請求:
POST /api/login HTTP/1.1
Content-Type: application/json
Accept: application/json

{
  "username": "john_doe",
  "password": "123456"
}
  • 響應:
HTTP/1.1 200 OK
Content-Type: application/json

{
  "message": "login successful",
  "token": "abcdef12345"
}

情境 2:表單提交

  • 請求:
POST /submit-form HTTP/1.1
Content-Type: application/x-www-form-urlencoded

name=John&age=30
  • 響應:
HTTP/1.1 200 OK
Content-Type: application/json

{
  "message": "Form submitted successfully"
}

情境 3:瀏覽器直接訪問(HTML 格式)

  • 請求:
GET /home HTTP/1.1
Accept: text/html
  • 響應:
HTTP/1.1 200 OK
Content-Type: text/html

<html>
  <body>
    <h1>Welcome to the homepage!</h1>
  </body>
</html>

如何根據請求決定響應格式?

後端可以根據請求的 Accept 頭部決定返回的響應格式。例如,在 Django 中:

def custom_view(request):
    if "application/json" in request.headers.get("Accept", ""):
        return JsonResponse({"message": "This is JSON"})
    else:
        return render(request, "template.html")
  • 如果 Accept: application/json,返回 JSON 格式。
  • 如果 Accept: text/html 或未指定,返回 HTML 模板。

總結

  1. 請求格式:
    • 前端請求包含三部分:請求行、請求頭、請求體。
    • 常用的請求體格式是 JSON 和 URL 編碼。
  2. 響應格式:
    • 後端響應也包含三部分:狀態行、響應頭、響應體。
    • 常見的響應格式是 JSON 和 HTML。
  3. 動態決定響應格式:
    • 根據 Accept 頭部判斷,滿足不同客戶端的需求。

了解請求與響應的格式,能讓你更好地設計前後端通信邏輯。

Similar Posts

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *