🌐 什麼是 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 相關標頭
- 快取標頭
4. Cookie 和 Session
狀態管理
- 克服 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 在瀏覽器中的使用
- 什麼是 API? - 基於 HTTP 的 API 概念
- 什麼是 HTTPS? - HTTP 的安全版本
- 什麼是 CORS? - HTTP 的跨源策略
🎬 結語
HTTP 是網路開發最基礎的協定。透過這個系列,您可以逐步掌握 HTTP 的核心概念!
下一步:閱讀 HTTP 方法,詳細了解 GET、POST 等方法。