TCP, HTTP & Web cho Backend/Module 2 — Tổng kết & cheat sheet
21/29
Bài 21 / 29~15 phútHTTP & WebMiễn phí lượt xem

Module 2 — Tổng kết & cheat sheet

Recap toàn cảnh HTTP & Web: cheat sheet status code, so sánh HTTP/1.1-2-3, REST/gRPC/WS/SSE, kiến trúc web edge client→CDN→LB→proxy→app. Glossary 18 thuật ngữ, pitfall tổng hợp, self-assessment.

TL;DR: Module 2 xây dựng tầng Application từ byte HTTP thô đến toàn bộ kiến trúc cạnh (edge): anatomy request/response, headers quan trọng, cookie/session/CORS, ba thế hệ HTTP, bốn pattern truyền thông (REST/gRPC/WS/SSE), caching/CDN, reverse proxy Nginx, và load balancing L4/L7. Trang này gom lại thành cheat sheet một trang để bookmark và tra nhanh. Nếu bạn giải thích được vì sao request bị chặn CORS, chọn được WebSocket thay REST cho một use case, và vẽ được luồng client → CDN → LB → Nginx → app, bạn đã sẵn sàng cho module 3.

Đã đi qua những gì

Bạn bắt đầu từ anatomy một HTTP request: method nói lên ý định (GET đọc, POST tạo, PUT/PATCH sửa, DELETE xoá), status code nói lên kết quả (1xx thông tin, 2xx thành công, 3xx chuyển hướng, 4xx lỗi client, 5xx lỗi server), và header truyền metadata không nằm trong body.

Tiếp theo là headers quan trọng nhất: Content-Type khai báo định dạng body, Authorization mang credential, Cache-Control điều khiển caching, ETag cho conditional request, và nhóm X-Forwarded-* khi có proxy.

Cookie và session cho thấy HTTP vốn stateless — cookie là cách duy nhất browser lưu state giữa các request. Các thuộc tính HttpOnly, Secure, SameSite bảo vệ cookie khỏi XSS và CSRF. CORS giải thích vì sao browser chặn request cross-origin và cách server cấp phép qua Access-Control-Allow-Origin.

Ba thế hệ HTTP giải quyết cùng một vấn đề — truyền dữ liệu — nhưng với hiệu năng khác nhau: HTTP/1.1 dùng nhiều TCP connection song song (head-of-line blocking per connection), HTTP/2 multiplexing nhiều stream trên một TCP connection (nhưng HOL blocking ở TCP), HTTP/3 chuyển sang QUIC/UDP để loại HOL blocking hoàn toàn.

Bốn pattern truyền thông phục vụ bốn nhu cầu: REST cho CRUD API stateless, gRPC cho internal microservice cần hiệu năng + contract mạnh, WebSocket cho real-time hai chiều (chat, game), SSE cho server push một chiều (notification, live feed).

Caching và CDN giảm tải origin và giảm latency: browser cache → CDN edge → origin. Cache-Control xác định TTL; ETag + conditional GET tránh truyền lại body khi không đổi. CDN đưa content tới gần user địa lý.

Reverse proxy Nginx đứng trước backend: TLS termination, routing theo path, rate limiting, static serving, header forwarding. Backend chạy HTTP thuần nội bộ.

Load balancer L4/L7 scale ngang: L4 routing theo TCP (nhanh, TLS passthrough), L7 routing theo HTTP content (linh hoạt, TLS termination). Thuật toán round-robin/least-conn/IP hash. Health check + failover. Sticky session là tình thế — Redis là giải pháp đúng.

🗺️ Cheat sheet

Status code tra nhanh

CodeNghĩaHay gặp khi
200 OKThành côngGET/PUT/DELETE thành công
201 CreatedTạo thành côngPOST tạo resource
204 No ContentThành công, không bodyDELETE, PUT không trả body
301 Moved PermanentlyRedirect vĩnh viễnĐổi domain, HTTP → HTTPS
302 FoundRedirect tạmLogin redirect
304 Not ModifiedCache còn hợp lệETag match → không truyền body
400 Bad RequestRequest sai formatThiếu field, sai type
401 UnauthorizedChưa xác thựcThiếu/hết hạn token
403 ForbiddenKhông có quyềnToken valid nhưng thiếu role
404 Not FoundResource không tồn tạiSai URL, đã bị xoá
405 Method Not AllowedMethod saiDELETE tới endpoint chỉ có GET
429 Too Many RequestsRate limitQuá nhiều request/giây
500 Internal Server ErrorLỗi serverUnhandled exception
502 Bad GatewayUpstream không trả lờiBackend down, Nginx không kết nối được
503 Service UnavailableServer quá tải / maintenanceDeployment, circuit breaker
504 Gateway TimeoutUpstream timeoutBackend quá chậm

HTTP/1.1 vs HTTP/2 vs HTTP/3

HTTP/1.1HTTP/2HTTP/3
TransportTCPTCPQUIC (UDP)
MultiplexingKhông (pipeline fragile)Có (stream trên 1 TCP)Có (stream độc lập)
HOL BlockingPer-connection (nhiều TCP giải quyết)TCP-level (1 gói lost block mọi stream)Không (QUIC stream độc lập)
Header compressionKhôngHPACKQPACK
Connection setupTCP 1RTTTCP 1RTT + TLS 1RTTQUIC 0-1RTT
TLSTuỳ chọnTuỳ chọn (thực tế bắt buộc)Bắt buộc (tích hợp trong QUIC)
Dùng khiMọi nơi (fallback)Hầu hết web hiện đạiCDN, mobile, latency nhạy cảm

REST vs gRPC vs WebSocket vs SSE

RESTgRPCWebSocketSSE
ProtocolHTTP/1.1-2HTTP/2WS (upgrade từ HTTP)HTTP (chunked)
FormatJSON (thường)Protobuf (binary)Binary/text tuỳ appText (event stream)
HướngRequest-ResponseRequest-Response + streamingFull-duplexServer → Client
ContractTuỳ convention.proto file (strict)KhôngKhông
BrowserHạn chế (cần grpc-web)
Dùng khiPublic API, CRUDInternal microservice, performanceChat, game, collaborationNotification, live feed

Kiến trúc web edge — luồng request production

flowchart LR
    C["Client"] --> CDN["CDN Edge<br/>(cache static)"]
    CDN --> LB["Load Balancer L7<br/>(round-robin / least-conn)"]
    LB --> N1["Nginx<br/>(TLS term + rate limit)"]
    LB --> N2["Nginx<br/>(TLS term + rate limit)"]
    N1 --> A1["App Instance 1"]
    N1 --> A2["App Instance 2"]
    N2 --> A1
    N2 --> A2
    A1 --> DB["DB + Redis<br/>(session store)"]
    A2 --> DB

📖 Glossary

Thuật ngữĐịnh nghĩa 1 câu
MethodĐộng từ HTTP nói lên ý định: GET (đọc), POST (tạo), PUT (thay toàn bộ), PATCH (sửa một phần), DELETE (xoá).
IdempotentRequest gửi nhiều lần cho kết quả giống như gửi một lần — GET, PUT, DELETE idempotent; POST thì không.
Status code classNhóm theo chữ số đầu: 2xx thành công, 3xx redirect, 4xx lỗi client, 5xx lỗi server.
ETagToken định danh phiên bản resource; client gửi lại trong If-None-Match để tránh tải lại body khi không đổi.
CORSCross-Origin Resource Sharing — cơ chế browser xin phép server khác origin cho phép request cross-origin.
PreflightRequest OPTIONS browser tự gửi trước request CORS phức tạp để kiểm tra server có cho phép không.
SameSiteThuộc tính cookie kiểm soát khi nào cookie được gửi kèm request cross-site: Strict, Lax, None.
MultiplexingGửi nhiều request/response song song trên một kết nối TCP duy nhất — tính năng cốt lõi HTTP/2.
HPACKThuật toán nén header HTTP/2 — giảm kích thước header bằng cách dùng bảng tĩnh + bảng động.
QUICGiao thức transport do Google phát triển, chạy trên UDP, tích hợp TLS, không có HOL blocking TCP — nền của HTTP/3.
HOL BlockingHead-of-Line Blocking — một gói bị mất khiến mọi stream/request khác phải chờ; HTTP/2 còn bị ở TCP, HTTP/3 không còn.
CDNContent Delivery Network — mạng server phân tán toàn cầu cache nội dung, đưa response về gần user hơn.
Reverse proxyServer đứng trước backend, nhận request từ client rồi chuyển tiếp — client không biết backend thật.
Forward proxyProxy phía client: client cấu hình để request đi qua proxy trước khi ra internet.
L4 LBLoad balancer tầng 4 (Transport/TCP): định tuyến theo IP + port, không đọc HTTP, TLS passthrough.
L7 LBLoad balancer tầng 7 (Application/HTTP): đọc URL/header/cookie, định tuyến thông minh, TLS termination.
Sticky sessionSession affinity — LB ghim user vào cùng server dựa theo IP hoặc cookie; tình thế khi session in-memory.
TLS terminationNginx/LB giải mã HTTPS, backend nhận HTTP thuần nội bộ — tập trung certificate management tại proxy.

⚠️ Pitfall tổng hợp

  • Nhầm 401403: 401 Unauthorized nghĩa là "chưa xác thực" (ai gửi request này?), 403 Forbidden nghĩa là "đã xác thực nhưng không có quyền". Nhầm khiến client debug sai hướng.
  • CORS không phải lỗi server: lỗi CORS xảy ra ở browser, không phải ở server hay network. Server nhận được request và trả response — browser chặn không cho JS đọc response đó. Log server không thấy gì.
  • HTTP/2 không tự động nhanh hơn với 1 file lớn: lợi ích HTTP/2 rõ nhất khi tải nhiều asset nhỏ song song. Tải 1 file lớn duy nhất qua HTTP/1.1 hay HTTP/2 gần như như nhau.
  • X-Forwarded-For bị giả mạo: client tự thêm header giả trước khi gửi request. Strip header từ client, chỉ tin giá trị proxy của bạn set.
  • Sticky session + server down: session mất theo server chết — user bị đăng xuất đột ngột. Giải pháp đúng là external session store (Redis).
  • Health check trả 200 nhưng DB unreachable: server trông healthy nhưng mọi request thật đều fail. Deep health check cần kiểm tra dependency thật.
  • proxy_pass trailing slash: proxy_pass http://backend/ cắt prefix location, proxy_pass http://backend giữ nguyên path — nhầm gây 404 hoặc double path ở backend.

✅ Self-assessment

Bạn đã đạt module này nếu trả lời được:

  • Explain được status code và header HTTP/1.1-2-3: vì sao 401 khác 403, ETag dùng để làm gì, HTTP/2 multiplexing giải quyết vấn đề gì so với HTTP/1.1 và HTTP/3 giải quyết thêm gì.
    • Nếu chưa: đọc lại bài 01 (HTTP anatomy), bài 02 (headers), bài 04 (HTTP/2), bài 05 (HTTP/3 QUIC).
  • Choose được giữa REST, gRPC, WebSocket, SSE cho từng bài toán: public API dùng gì, chat app dùng gì, live notification dùng gì, internal microservice cần hiệu năng dùng gì.
    • Nếu chưa: đọc lại bài 06 (REST/gRPC/WS/SSE) phần so sánh và use case.
  • Design được caching/CDN/reverse-proxy/load-balancer cho web scale: vẽ được luồng client → CDN → LB → Nginx → app pool → Redis, giải thích vai trò từng tầng và khi nào sticky session cần/không cần.
    • Nếu chưa: đọc lại bài 07 (caching/CDN), bài 08 (Nginx reverse proxy), bài 09 (LB L4/L7).

🚀 What's next

Module 2 hoàn thiện tầng Application. Module 3 — TLS & Công cụ Debug — đào sâu vào lớp bảo mật nằm dưới HTTP: TLS handshake hoạt động ra sao, certificate chain được xác thực thế nào, và cách dùng openssl s_client, curl -v, Wireshark để debug khi mọi thứ không hoạt động như kỳ vọng. Biết debug TLS là kỹ năng phân biệt engineer nắm công cụ với người chỉ biết dùng.

Bài tiếp theo: Module 3 — TLS & Công cụ Debug: tổng quan

📚 Tài liệu mở rộng

  • High Performance Browser Networking (Ilya Grigorik, O'Reilly) — chương 2-4 về TCP, TLS, HTTP/1-2; chương 12 về HTTP/2; toàn bộ cuốn sách này là reference chuẩn nhất về networking cho web developer. Đọc miễn phí tại hpbn.co.
  • RFC 9110 — HTTP Semantics: định nghĩa method, status code, header — nơi tra cứu khi cần biết "đúng ra 204 có được có body không?".
  • RFC 9113 — HTTP/2: multiplexing, HPACK, stream priority.
  • RFC 9114 — HTTP/3: QUIC transport, QPACK header compression.
  • MDN Web Docs — HTTP: developer.mozilla.org/en-US/docs/Web/HTTP — reference nhanh cho mọi header, method, status code, với ví dụ thực tế và browser compatibility.

Bài này đáng gửi cho bạn học cùng?

Copy link đã gắn nguồn — dán group, chat, hoặc LinkedIn.

Bài này có giúp bạn hiểu bản chất không?

Hỏi đáp về bài này

Chưa có câu hỏi

Đặt câu hỏi

Có gì chưa rõ trong bài? Đặt câu hỏi đầu tiên — câu trả lời từ cộng đồng giúp bạn (và người sau).

Đặt câu hỏi đầu tiên

Bài tiếp theo

Module 3 — TLS & Công cụ Debug: tổng quan