Explore all courses in this category.
Explore all courses in this category.
Nguyễn Đình Cường
0 comment
09 Nov, 2026
Mỗi khi bạn mở web, gửi form hay gọi API, trình duyệt và máy chủ đang "nói chuyện" bằng HTTP. Đây là ngôn ngữ chung của web, và hiểu nó là bước đệm quan trọng trước khi học backend hay frontend.
HTTP (HyperText Transfer Protocol) là giao thức ở lớp ứng dụng, quy định cách client (trình duyệt, ứng dụng) gửi request và server trả response. Mỗi lần trao đổi độc lập: server không tự nhớ bạn là ai ở request trước, nên người ta dùng cookie hay token để duy trì phiên đăng nhập. Đặc điểm này gọi là phi trạng thái (stateless).
GET /courses?page=2 HTTP/1.1
Host: codebem.com
Accept: text/html
User-Agent: Mozilla/5.0| Method | Ý nghĩa | Ví dụ |
|---|---|---|
| GET | Lấy dữ liệu, không làm thay đổi | Xem danh sách bài viết |
| POST | Tạo mới / gửi dữ liệu xử lý | Đăng ký tài khoản |
| PUT / PATCH | Cập nhật toàn bộ / một phần | Sửa hồ sơ |
| DELETE | Xóa | Xóa bình luận |
Quy ước quan trọng: GET nên chỉ đọc. Nếu dùng GET để xóa dữ liệu, một liên kết bình thường hoặc công cụ tìm kiếm cũng có thể vô tình kích hoạt nó.
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 27
{"id": 1, "ten": "Lập trình"}Gồm dòng trạng thái, header và body. Header Content-Type cho biết nội dung là HTML, JSON, ảnh hay loại khác để client biết cách đọc.
Mã trạng thái cho biết kết quả xử lý, chia theo nhóm:
Nhìn đầu chữ số là biết lỗi do ai: 4 là do request, 5 là do server.
HTTPS là HTTP chạy trên lớp mã hóa TLS. Dữ liệu giữa trình duyệt và máy chủ được mã hóa nên người nghe lén trên đường truyền không đọc được mật khẩu hay thông tin cá nhân, và bạn có thể xác minh mình đang nói chuyện đúng máy chủ. Ngày nay mọi website nghiêm túc đều nên dùng HTTPS.
import json
import urllib.request
req = urllib.request.Request(
"https://httpbin.org/post",
data=json.dumps({"ten": "Lan"}).encode(),
headers={"Content-Type": "application/json"},
method="POST",
)
with urllib.request.urlopen(req) as res:
print(res.status)
print(res.read().decode()[:100])Bạn cũng có thể dùng công cụ như curl hoặc tab Network trong DevTools của trình duyệt để quan sát request thật: nhấn F12, chọn Network, tải lại trang.
Ngoài method và status, vài header bạn sẽ gặp liên tục:
| Header | Công dụng |
|---|---|
| Content-Type | Loại dữ liệu trong body (text/html, application/json) |
| Authorization | Thông tin xác thực gửi kèm yêu cầu |
| Cache-Control | Hướng dẫn trình duyệt lưu đệm nội dung bao lâu |
| Set-Cookie / Cookie | Server gửi cookie, trình duyệt gửi lại ở các yêu cầu sau |
| Location | Địa chỉ chuyển hướng đi kèm mã 3xx |
Cookie là cách phổ biến để vượt qua tính chất phi trạng thái: sau khi đăng nhập, server gửi một cookie chứa mã phiên; từ đó trình duyệt tự đính kèm nó vào mọi request, và server nhận ra bạn. Vì vậy cookie phiên cần được bảo vệ, thường đặt thêm các cờ như HttpOnly (JavaScript không đọc được) và Secure (chỉ gửi qua HTTPS).
Bài tập nhỏ: mở DevTools, vào tab Network, chọn một yêu cầu và đọc header của nó. Tìm xem trang bạn đang dùng trả về Content-Type nào và có những cookie nào.
Trong thư mục chứa vài file HTML, chạy python -m http.server 8000 rồi mở http://localhost:8000. Bạn vừa có một máy chủ web thật, và tab Network sẽ cho thấy từng request GET cùng mã 200 hoặc 404 khi bạn mở file không tồn tại. Đây là cách trực quan nhất để thấy lý thuyết chạy thật.
HTTP là cuộc hội thoại gồm request và response, với method nói lên ý định, header mô tả thêm, và status code báo kết quả. Dành một buổi mở DevTools quan sát các request của những trang bạn thường dùng, bạn sẽ hiểu web nhanh hơn rất nhiều so với chỉ đọc lý thuyết.
Nếu cần một lộ trình rõ ràng thay vì tự mò mẫm, codebem.com có nhiều khóa học phù hợp cho người mới.
Nguyễn Đình Cường
0 comment