跳至正文

🌐 什麼是 HTTP?

📖 定義

HTTP (HyperText Transfer Protocol) 是一種用於在網路上傳輸數據的協定。它定義了客戶端(瀏覽器)和伺服器之間的通訊規則,是網路技術的基礎。

🎯 用比喻來理解

郵遞系統

用郵遞系統來比喻 HTTP:

發送信件 (HTTP 請求)
├─ 寄件人:客戶端 (瀏覽器)
├─ 收件人:伺服器
├─ 信件內容:請求數據
└─ 郵遞規則:HTTP 協定

收到回信 (HTTP 回應)
├─ 寄件人:伺服器
├─ 收件人:客戶端
├─ 回信內容:回應數據
└─ 狀態:成功/失敗

餐廳點餐

顧客 (客戶端)
↓ 查看菜單 (GET 請求)
服務生 (HTTP)
↓ 傳遞訂單
廚房 (伺服器)
↓ 準備食物
服務生 (HTTP)
↓ 傳遞食物 (回應)
顧客 (客戶端)

💡 HTTP 核心概念

請求與回應

客戶端 ────請求(Request)───→ 伺服器
←───回應(Response)────

請求 (Request)

  • 客戶端向伺服器表達需求
  • 由方法、URL、標頭、主體組成

回應 (Response)

  • 伺服器對客戶端請求的結果
  • 由狀態碼、標頭、主體組成

HTTP 特點

1. 無狀態性 (Stateless)
├─ 每個請求都是獨立的
├─ 不記得之前的請求
└─ 通過 Cookie/Session 管理狀態

2. 客戶端-伺服器架構
├─ 角色分離
├─ 客戶端:UI/UX
└─ 伺服器:數據/業務邏輯

3. 無連接性 (Connectionless)
├─ 請求-回應後斷開連接
├─ 節省伺服器資源
└─ 可通過 Keep-Alive 改善

📚 系列文檔

本系列將逐步介紹 HTTP 的核心概念:

1. HTTP 方法

GET, POST, PUT, DELETE 等

  • HTTP 方法的種類和用途
  • RESTful API 設計
  • 冪等性和安全性
  • 實際範例

2. HTTP 狀態碼

200, 404, 500 等

  • 2xx (成功)、4xx (客戶端錯誤)、5xx (伺服器錯誤)
  • 每個狀態碼的含義
  • 實務中常見的代碼
  • 錯誤處理方法

3. HTTP 標頭

請求/回應標頭

  • 標頭的角色和類型
  • Content-Type, Authorization 等
  • CORS 相關標頭
  • 快取標頭

狀態管理

  • 克服 HTTP 的無狀態性
  • Cookie 的工作原理
  • Session vs Token
  • 安全考量

🔍 HTTP 的演進

HTTP/0.9 (1991)
├─ 僅支持 GET 方法
└─ 只傳輸 HTML

HTTP/1.0 (1996)
├─ 引入標頭概念
├─ 新增 POST, HEAD
└─ 引入狀態碼

HTTP/1.1 (1997)
├─ 預設 Keep-Alive
├─ 管線化
├─ 新增 PUT, DELETE 等
└─ 主機標頭成為必須

HTTP/2 (2015)
├─ 二進位協定
├─ 多路複用
├─ 標頭壓縮
└─ 伺服器推送

HTTP/3 (2022)
├─ 基於 QUIC (UDP)
├─ 更快的連接
└─ 對封包遺失更強

💡 實際範例

網頁載入

1. 在瀏覽器輸入 URL
https://example.com

2. DNS 查詢
example.com → 93.184.216.34

3. 建立 HTTP 請求
GET / HTTP/1.1
Host: example.com
User-Agent: Chrome/120.0

4. 伺服器回應
HTTP/1.1 200 OK
Content-Type: text/html

<html>...</html>

5. 瀏覽器渲染
顯示網頁

API 呼叫範例

# GET 請求 - 查詢數據
curl https://api.example.com/users

# POST 請求 - 建立數據
curl -X POST https://api.example.com/users \
-H "Content-Type: application/json" \
-d '{"name": "王小明"}'

# PUT 請求 - 修改數據
curl -X PUT https://api.example.com/users/1 \
-H "Content-Type: application/json" \
-d '{"name": "李大同"}'

# DELETE 請求 - 刪除數據
curl -X DELETE https://api.example.com/users/1

🤔 常見問題

Q1. HTTP 和 HTTPS 有什麼不同?

答:

HTTP (Port 80)
├─ 明文通訊
├─ 安全性低
└─ http://

HTTPS (Port 443)
├─ SSL/TLS 加密
├─ 數據保護
├─ 需要憑證
└─ https://

主要差異:
- HTTPS 對數據進行加密傳輸
- 防止中間人攻擊
- 有利於搜索引擎優化(SEO)
- 現代網路的標準

Q2. 為什麼 HTTP 是無狀態的?

答:

無狀態的原因:
1. 可擴展性
├─ 伺服器不儲存狀態
├─ 可以分散到多台伺服器
└─ 負載平衡更容易

2. 簡單性
├─ 每個請求都是獨立的
├─ 伺服器實現簡單
└─ 故障恢復更容易

3. 資源節省
├─ 最小化記憶體使用
└─ 同時處理更有效率

狀態管理方法:
- Cookie
- Session
- Token (JWT)
- 本地儲存

Q3. REST API 和 HTTP 的關係是什麼?

答:

REST (Representational State Transfer)
├─ 基於 HTTP 的架構風格
├─ 將 HTTP 方法映射到 CRUD
└─ 以資源為中心的設計

HTTP 方法和 CRUD 的對應:
GET → Read (查詢)
POST → Create (建立)
PUT → Update (全部更新)
PATCH → Update (部分更新)
DELETE → Delete (刪除)

RESTful API 範例:
GET /users - 查詢使用者列表
GET /users/1 - 查詢特定使用者
POST /users - 建立新使用者
PUT /users/1 - 更新使用者資訊
DELETE /users/1 - 刪除使用者

🎓 推薦學習順序

第一階段:基礎概念
├─ 什麼是 HTTP?(當前文檔)
├─ 請求/回應結構
└─ 客戶端-伺服器模型

第二階段:HTTP 方法
├─ GET, POST, PUT, DELETE
├─ 每個方法的用途
└─ RESTful 設計

第三階段:狀態碼
├─ 2xx, 4xx, 5xx 的意義
├─ 常見代碼
└─ 錯誤處理

第四階段:標頭
├─ 請求/回應標頭
├─ Content-Type
└─ 認證標頭

第五階段:狀態管理
├─ Cookie 和 Session
├─ 基於 Token 的認證
└─ 安全考量

🔗 相關文檔

🎬 結語

HTTP 是網路開發最基礎的協定。透過這個系列,您可以逐步掌握 HTTP 的核心概念!

下一步:閱讀 HTTP 方法,詳細了解 GET、POST 等方法。