Back to blog

HTTP Protocol: Hướng Dẫn Toàn Diện

httpweb fundamentalsnetworkingbackendapi
HTTP Protocol: Hướng Dẫn Toàn Diện

Giới Thiệu

Mỗi khi bạn duyệt web, gọi API, hoặc tương tác với ứng dụng web, bạn đang sử dụng HTTP — HyperText Transfer Protocol. Đây là nền tảng của giao tiếp dữ liệu trên web và hiểu sâu về nó sẽ giúp bạn trở thành developer giỏi hơn.

Bài viết này sẽ đưa bạn từ kiến thức cơ bản đến các khái niệm nâng cao như HTTP/2 và HTTP/3, với các ví dụ thực tế mà bạn có thể áp dụng ngay.

Bạn Sẽ Học Được

✅ Hiểu HTTP là gì và cách hoạt động
✅ Nắm vững HTTP methods (GET, POST, PUT, DELETE, PATCH, và nhiều hơn)
✅ Học tất cả HTTP status codes và khi nào sử dụng
✅ Làm việc với headers, cookies, và authentication
✅ Hiểu HTTPS và bảo mật TLS/SSL
✅ Khám phá cải tiến HTTP/2 và HTTP/3
✅ Triển khai caching và CORS đúng cách
✅ Debug HTTP với curl, Postman, và browser DevTools


HTTP Là Gì?

HTTP (HyperText Transfer Protocol) là giao thức tầng ứng dụng để truyền tải các tài liệu hypermedia (như HTML). Nó tuân theo mô hình client-server:

  • Client (browser, app, hoặc API consumer) gửi request
  • Server xử lý request và trả về response
Client                          Server
  |                               |
  |  -------- Request --------->  |
  |                               |
  |  <------- Response ---------  |
  |                               |

Đặc Điểm Chính

  • Stateless: Mỗi request độc lập. Server không nhớ các request trước.
  • Text-based: HTTP messages có thể đọc được (cho đến khi HTTP/2 dùng binary).
  • Extensible: Headers cho phép thêm metadata tùy chỉnh.
  • Request-Response: Mỗi tương tác là một request theo sau bởi response.

Lịch Sử HTTP

HTTP/1.0 (1996)

  • Thêm POST, HEAD methods
  • Giới thiệu status codes
  • Thêm headers
  • Một request mỗi kết nối TCP

HTTP/1.1 (1997) — Persistent Connections

  • Persistent connections (keep-alive mặc định)
  • Pipelining (gửi nhiều requests mà không chờ responses)
  • Methods mới: PUT, PATCH, DELETE, OPTIONS
  • Bắt buộc có Host header

Vẫn được sử dụng rộng rãi ngày nay!

HTTP/2 (2015) — Binary và Multiplexed

  • Binary framing (không phải text)
  • Multiplexing (nhiều requests trên một connection)
  • Header compression (HPACK)
  • Server push

HTTP/3 (2022) — QUIC Protocol

  • Xây dựng trên QUIC (UDP-based) thay vì TCP
  • 0-RTT connection (kết nối nhanh hơn)
  • Independent streams (không bị head-of-line blocking)
  • Built-in encryption (bắt buộc TLS 1.3)

Cấu Trúc HTTP Request

METHOD /path HTTP/version
Header1: Value1
Header2: Value2
 
Request Body (tùy chọn)

Ví Dụ Request

POST /api/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
Authorization: Bearer eyJhbGciOiJIUzI1NiIs...
Content-Length: 58
 
{"name": "John Doe", "email": "[email protected]"}

Cấu Trúc HTTP Response

HTTP/version StatusCode StatusMessage
Header1: Value1
Header2: Value2
 
Response Body

Ví Dụ Response

HTTP/1.1 201 Created
Content-Type: application/json
Location: /api/users/123
 
{
  "id": 123,
  "name": "John Doe",
  "email": "[email protected]"
}

HTTP Methods (Verbs)

GET — Lấy Dữ Liệu

Safe và idempotent. Không thay đổi trạng thái server.

GET /api/users/123 HTTP/1.1
Host: api.example.com

POST — Tạo Dữ Liệu

Không idempotent. Tạo resource mới.

POST /api/users HTTP/1.1
Host: api.example.com
Content-Type: application/json
 
{"name": "Jane Doe", "email": "[email protected]"}

PUT — Thay Thế Dữ Liệu

Idempotent. Thay thế toàn bộ resource.

PUT /api/users/123 HTTP/1.1
Content-Type: application/json
 
{"id": 123, "name": "John Smith", "email": "[email protected]"}

PATCH — Cập Nhật Một Phần

Cập nhật các trường cụ thể.

PATCH /api/users/123 HTTP/1.1
Content-Type: application/json
 
{"name": "John Smith"}

DELETE — Xóa Dữ Liệu

Idempotent. Xóa resource.

DELETE /api/users/123 HTTP/1.1

So Sánh Methods

MethodRequest BodyIdempotentSafeCacheable
GETKhôngCóCóCó
POSTCóKhôngKhôngHiếm
PUTCóCóKhôngKhông
PATCHCóKhôngKhôngKhông
DELETETùy chọnCóKhôngKhông

HTTP Status Codes

2xx — Thành Công

CodeTênKhi Sử Dụng
200OKGET, PUT, PATCH thành công
201CreatedResource được tạo (POST)
202AcceptedRequest được chấp nhận cho xử lý async
204No ContentThành công, không có body

3xx — Chuyển Hướng

CodeTênKhi Sử Dụng
301Moved PermanentlyResource di chuyển vĩnh viễn
304Not ModifiedPhiên bản cache vẫn còn valid
307Temporary RedirectChuyển hướng tạm thời (giữ method)

4xx — Lỗi Client

CodeTênKhi Sử Dụng
400Bad RequestCú pháp không hợp lệ, validation failed
401UnauthorizedCần authentication
403ForbiddenĐã xác thực nhưng không có quyền
404Not FoundResource không tồn tại
409ConflictRequest xung đột với trạng thái hiện tại
422Unprocessable EntityValidation errors
429Too Many RequestsVượt quá rate limit

5xx — Lỗi Server

CodeTênKhi Sử Dụng
500Internal Server ErrorLỗi server chung
502Bad GatewayUpstream server trả về response không hợp lệ
503Service UnavailableServer quá tải hoặc bảo trì
504Gateway TimeoutUpstream server không phản hồi kịp thời

HTTP Headers

Request Headers Phổ Biến

Host: api.example.com                          # Bắt buộc trong HTTP/1.1
Accept: application/json                       # Định dạng response mong muốn
Content-Type: application/json                 # Định dạng body của request
Authorization: Bearer eyJhbGciOi...           # Token xác thực
User-Agent: Mozilla/5.0                       # Định danh client
Cookie: session=abc123                         # Cookies

Response Headers Phổ Biến

Content-Type: application/json                 # Định dạng body response
Cache-Control: max-age=3600                    # Chỉ thị caching
ETag: "abc123"                                 # Phiên bản resource
Set-Cookie: session=xyz; HttpOnly; Secure     # Đặt cookies
Location: /api/users/123                       # URL chuyển hướng hoặc resource mới tạo

Cookies và Sessions

Cách Cookies Hoạt Động

1. Client gửi request
2. Server trả về với header Set-Cookie
3. Browser lưu cookie
4. Browser gửi cookie với các requests tiếp theo đến cùng domain

Đặt Cookies

Set-Cookie: session_id=abc123; Path=/; HttpOnly; Secure; SameSite=Strict; Max-Age=86400
AttributeMô Tả
PathURL path nơi cookie được gửi
HttpOnlyKhông thể truy cập qua JavaScript
SecureChỉ gửi qua HTTPS
SameSiteBảo vệ CSRF (Strict, Lax, None)
Max-AgeThời gian hết hạn (giây)

HTTPS và TLS/SSL

HTTPS = HTTP + TLS (Transport Layer Security)

Tại Sao Cần HTTPS?

  • ✅ Encryption: Dữ liệu không thể bị đọc bởi attacker
  • ✅ Authentication: Xác minh danh tính server qua certificate
  • ✅ Integrity: Dữ liệu không thể bị sửa đổi trong quá trình truyền
  • ✅ SEO: Google xếp hạng cao hơn cho site HTTPS
  • ✅ Bắt buộc cho tính năng hiện đại: HTTP/2, Service Workers

HTTP vs HTTPS

FeatureHTTPHTTPS
Port80443
EncryptionKhôngTLS
Bảo mậtDễ bị MITMAn toàn

HTTP Caching

Cache-Control Header

Cache-Control: public, max-age=3600, must-revalidate
DirectiveÝ Nghĩa
publicCDN, proxy, browser có thể cache
privateChỉ browser có thể cache
no-cachePhải revalidate với server trước khi sử dụng
no-storeKhông cache
max-age=NCache trong N giây

ETag và Conditional Requests

Server gửi ETag:

HTTP/1.1 200 OK
ETag: "abc123"

Client validate với If-None-Match:

GET /api/users/1 HTTP/1.1
If-None-Match: "abc123"

Server trả về nếu không đổi:

HTTP/1.1 304 Not Modified

CORS (Cross-Origin Resource Sharing)

CORS kiểm soát domain nào có thể truy cập API của bạn từ browsers.

Same-Origin Policy

Browsers block requests đến origins khác nhau mặc định:

https://frontend.com → https://api.com  ❌ Blocked
https://api.com      → https://api.com  ✅ Allowed

CORS Headers

# Response headers
Access-Control-Allow-Origin: https://frontend.example.com
Access-Control-Allow-Methods: GET, POST, PUT, DELETE
Access-Control-Allow-Headers: Content-Type, Authorization
Access-Control-Allow-Credentials: true

Preflight Requests

Request phức tạp kích hoạt OPTIONS preflight trước:

Browser → OPTIONS /api/users → Server
Browser ← 204 với CORS headers ← Server
Browser → POST /api/users → Server
Browser ← 201 Created ← Server

HTTP/2 Chi Tiết

Tính Năng Chính

1. Binary Framing HTTP/2 sử dụng định dạng binary thay vì text.

2. Multiplexing Nhiều requests/responses trên cùng connection:

Stream 1: Request → ← Response
Stream 3: Request → ← Response
Stream 5: Request → ← Response
(Tất cả trên cùng TCP connection)

3. Header Compression (HPACK) Headers được nén và cache.

4. Server Push Server gửi resources trước khi client request.


HTTP/3 và QUIC

Tại Sao HTTP/3?

HTTP/2 vẫn dùng TCP, có vấn đề:

  • Head-of-line blocking: Packet mất block tất cả streams
  • Connection setup: TCP + TLS handshake chậm
  • Connection migration: Đổi IP làm mất connection

QUIC Features

  • UDP-based: Không bị TCP head-of-line blocking
  • 0-RTT Connection: Có thể gửi data với packet đầu tiên
  • Independent Streams: Packet loss ở một stream không ảnh hưởng streams khác
  • Connection Migration: Connection tồn tại khi đổi IP (mobile switching)

Debug HTTP

Sử Dụng curl

GET cơ bản:

curl https://api.example.com/users

POST với JSON:

curl -X POST https://api.example.com/users \
  -H "Content-Type: application/json" \
  -d '{"name": "John"}'

Xem headers:

curl -v https://api.example.com/users

Chỉ response headers:

curl -I https://api.example.com/users

Browser DevTools

  1. Mở DevTools (F12)
  2. Vào tab Network
  3. Thực hiện request
  4. Click vào request để xem:
    • Headers (request và response)
    • Preview (response đã format)
    • Timing (connection, waiting, download)

Best Practices

API Design

  1. Sử dụng HTTP methods phù hợp
  2. Trả về status codes phù hợp
  3. Định dạng error nhất quán
  4. Version API của bạn

Security

  1. Luôn dùng HTTPS trong production
  2. Set security headers
  3. Cấu hình CORS đúng cách
  4. Dùng HttpOnly, Secure, SameSite cho cookies

Performance

  1. Bật compression (gzip hoặc brotli)
  2. Set cache headers phù hợp
  3. Dùng HTTP/2 hoặc HTTP/3 khi có thể
  4. Giảm thiểu redirects

Tổng Kết

✅ HTTP là giao thức giao tiếp web, dựa trên mô hình request-response
✅ HTTP versions: 1.1 (phổ biến), 2 (multiplexing, binary), 3 (QUIC, UDP-based)
✅ Methods: GET (đọc), POST (tạo), PUT (thay thế), PATCH (cập nhật), DELETE (xóa)
✅ Status codes: 2xx (thành công), 3xx (redirect), 4xx (lỗi client), 5xx (lỗi server)
✅ Headers cung cấp metadata cho requests và responses
✅ HTTPS mã hóa communication sử dụng TLS
✅ Caching sử dụng Cache-Control, ETag, và Last-Modified headers
✅ CORS kiểm soát cross-origin access trong browsers
✅ Debug với curl, Postman, hoặc browser DevTools


Tiếp Theo

Bây giờ bạn đã hiểu HTTP, tiếp tục học:

Xây dựng REST APIs:

Tài liệu hóa APIs:

Tìm hiểu sâu:


Kết Luận

HTTP là nền tảng của giao tiếp web. Hiểu cách requests và responses hoạt động, ý nghĩa của các status codes, và cách các tính năng như caching và CORS hoạt động sẽ giúp bạn trở thành developer hiệu quả hơn.

Dù bạn đang xây dựng APIs, debug network issues, hay tối ưu performance, kiến thức HTTP từ bài viết này sẽ phục vụ bạn tốt trong suốt sự nghiệp.

Happy coding! 🚀

📬 Đăng ký nhận bản tin

Nhận những bài viết mới nhất qua email mỗi tuần. Không spam, hủy đăng ký bất cứ lúc nào.

Chúng tôi tôn trọng quyền riêng tư của bạn. Hủy đăng ký bất cứ lúc nào.

💬 Comments

Đăng nhập để bình luận

Chúng tôi sẽ không đăng bất cứ điều gì mà không có sự cho phép của bạn.