HTTP là gì? Request, response, method và status code

  • author-image

    Nguyễn Đình Cường

  • blog-tag
  • blog-comment 0 comment
  • created-date 09 Nov, 2026
blog-thumbnail

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 hoạt động theo mô hình hỏi - đáp

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).

Cấu trúc một request

GET /courses?page=2 HTTP/1.1
Host: codebem.com
Accept: text/html
User-Agent: Mozilla/5.0
  • Dòng đầu: phương thức, đường dẫn, phiên bản.
  • Header: thông tin bổ sung như tên miền, loại nội dung chấp nhận, cookie.
  • Body (nếu có): dữ liệu gửi lên, thường với POST, PUT.

Các phương thức (method) chính

MethodÝ nghĩaVí dụ
GETLấy dữ liệu, không làm thay đổiXem danh sách bài viết
POSTTạo mới / gửi dữ liệu xử lýĐăng ký tài khoản
PUT / PATCHCập nhật toàn bộ / một phầnSửa hồ sơ
DELETEXóaXó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ó.

Cấu trúc một response

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 (status code)

Mã trạng thái cho biết kết quả xử lý, chia theo nhóm:

  • 2xx - Thành công: 200 OK, 201 Created, 204 No Content.
  • 3xx - Chuyển hướng: 301 chuyển vĩnh viễn, 302 chuyển tạm thời.
  • 4xx - Lỗi phía client: 400 yêu cầu sai, 401 chưa xác thực, 403 bị cấm, 404 không tìm thấy, 429 gửi quá nhiều.
  • 5xx - Lỗi phía server: 500 lỗi nội bộ, 502 và 503 máy chủ không sẵn sàng.

Nhìn đầu chữ số là biết lỗi do ai: 4 là do request, 5 là do server.

HTTPS khác gì HTTP?

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.

Thử gửi request bằng code

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.

Header quan trọng và cookie

Ngoài method và status, vài header bạn sẽ gặp liên tục:

HeaderCông dụng
Content-TypeLoại dữ liệu trong body (text/html, application/json)
AuthorizationThông tin xác thực gửi kèm yêu cầu
Cache-ControlHướng dẫn trình duyệt lưu đệm nội dung bao lâu
Set-Cookie / CookieServer 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.

Thử tự dựng một máy chủ HTTP nhỏ

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.

Kết luận

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.

author_photo
Nguyễn Đình Cường

0 comment