DDevArchive
Đăng nhập

Mô hình Client – Server

Hầu hết phần mềm bạn dùng đều là "người hỏi" và "người trả lời". Hiểu ai hỏi, ai trả, và lời hứa giữa họ, bạn sẽ không còn lẫn lộn khi nghe "frontend" với "backend".

Ai là client, ai là server

Client là bên gửi yêu cầu: trình duyệt, app điện thoại, một đoạn script. Server là bên lắng nghe và trả lời: máy chứa web, chứa database. Một máy có thể vừa là server của người này vừa là client của người kia.

// File: server.js
// Node.js http: một server 10 dòng
const http = require('http');

http.createServer((req, res) => {
  if (req.url === '/hello') {
    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.end('{"msg":"Xin chào!"}');
  } else {
    res.writeHead(404);
    res.end('Không tìm thấy');
  }
}).listen(3000);

Vòng đời của một yêu cầu

BướcAi làmChuyện gì xảy ra
1ClientDựng request: URL, phương thức, dữ liệu gửi
2MạngRequest đi qua DNS, router, tới server
3ServerNhận, xử lý (có thể gọi thêm database)
4ServerDựng response và gửi về
5ClientNhận, render ra màn hình
💡 Frontend vs Backend chỉ là hai nửa của model này

Frontend = phần client mà người dùng chạm vào. Backend = phần server xử lý nghiệp vụ. Giao diện là cách client “hỏi”, API là ngôn ngữ hỏi–đáp giữa hai bên.

Stateful vs Stateless

HTTP mỗi request là một lần gặp “người lạ” — server không nhớ bạn là ai sau khi trả lời xong (stateless). Để server nhận diện được bạn ở request sau, client phải gửi kèm “thẻ nhận diện” (token/session). Đây chính là nền của bài Đăng nhập ở khoá sau.

❓ Trong mô hình Client–Server, ai giữ "trạng thái" nhận diện người dùng để các request sau được biết là cùng một người?

  • Phân biệt được client và server
  • Vẽ được vòng đời 1 request
  • Hiểu vì sao HTTP stateless lại cần token
  • Tự viết được server hello 10 dòng với Node