HTTP là gì?
HTTP (HyperText Transfer Protocol) là giao thức truyền tải siêu văn bản, dùng để trao đổi dữ liệu giữa client (thường là trình duyệt web) và server (máy chủ web) qua mô hình request–response. HTTP hoạt động ở tầng ứng dụng (Application Layer) trong mô hình OSI/TCP-IP, dựa trên kết nối TCP để thiết lập kênh truyền tin.
Lịch sử ra đời của HTTP
HTTP được đề xuất và phát triển lần đầu bởi Tim Berners-Lee cùng nhóm nghiên cứu tại CERN (1989 – 1990), nhằm tạo nền tảng cho World Wide Web. Phiên bản đầu tiên là HTTP/0.9, đơn giản chỉ hỗ trợ GET request và trả về nội dung HTML thuần túy.
HTTP/1.0 (1996): Được chuẩn hóa trong RFC 1945, bổ sung nhiều tính năng so với HTTP/0.9 như định nghĩa rõ ràng hơn về request line, response headers, status codes, khả năng truyền nhiều loại nội dung (MIME types)…
HTTP/1.1 (1997): Chuẩn RFC 2068 (sau cập nhật RFC 2616), cải tiến hiệu năng bằng cách hỗ trợ persistent connections (giữ kết nối TCP giữa nhiều request–response), pipelining (gửi nhiều request mà không phải chờ từng response một), chunked transfer encoding… Đây là phiên bản HTTP phổ biến nhất trong nhiều năm.
HTTP/2 (2015): Chuẩn RFC 7540, thiết kế để khắc phục các hạn chế về hiệu suất của HTTP/1.1, như:
- Multiplexing: Cho phép nhiều stream (nhiều request–response) dùng chung một kết nối TCP, tránh tình trạng head-of-line blocking.
- Header compression: Nén header nhằm giảm overhead truyền tải.
- Server push: Server có thể “đẩy” thêm tài nguyên (CSS, JS, hình ảnh) mà client chưa yêu cầu, giảm độ trễ khi tải trang.
HTTP/3 (2022): Dựa trên giao thức QUIC (được xây dựng trên UDP thay vì TCP), giảm độ trễ khởi tạo kết nối và cải thiện độ ổn định khi mạng không ổn định.
Các thành phần cơ bản của HTTP
Request Line (Dòng yêu cầu)
Cú pháp: <METHOD> <URL> HTTP/<VERSION>
Ví dụ: GET /index.html HTTP/1.1
Trong đó:
- METHOD: phương thức HTTP (GET, POST, PUT, DELETE, PATCH…).
- URL: đường dẫn tài nguyên trên server (có thể là path tương đối, đi kèm query string).
- VERSION: phiên bản HTTP (ví dụ: HTTP/1.0, HTTP/1.1, HTTP/2.0).
Request Headers
Dùng để truyền thông tin bổ trợ (metadata) về client, dữ liệu gửi đi, chấp nhận định dạng (Accept), ngôn ngữ (Accept-Language), cookies, kiểu trình duyệt (User-Agent)…
Ví dụ:
Host: www.example.com User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) Accept: text/html,application/xhtml+xml
Request Body
Chỉ xuất hiện khi client gửi dữ liệu đến server (thường là các phương thức POST, PUT, PATCH…). Có thể chứa dữ liệu form (application/x-www-form-urlencoded), JSON (application/json), file (multipart/form-data), v.v.
Response Status Line
Cú pháp: HTTP/<VERSION> <STATUS_CODE> <REASON_PHRASE>
Ví dụ: HTTP/1.1 200 OK
STATUS_CODE: mã trạng thái 3 chữ số, chia thành 5 nhóm:
- 1xx (Informational): thông tin (thường ít dùng).
- 2xx (Success): thành công (200 OK, 201 Created, 204 No Content…).
- 3xx (Redirection): chuyển hướng (301 Moved Permanently, 302 Found, 304 Not Modified…).
- 4xx (Client Error): lỗi do phía client (400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found…).
- 5xx (Server Error): lỗi do server (500 Internal Server Error, 502 Bad Gateway, 503 Service Unavailable…).
Response Headers
Thông tin bổ trợ về server, kiểu nội dung (Content-Type), kích thước (Content-Length), cache (Cache-Control, Expires), kiểm soát cookie (Set-Cookie)…
Ví dụ:
Date: Wed, 05 Jun 2024 10:00:00 GMT Server: Apache/2.4.41 (Ubuntu) Content-Type: text/html; charset=UTF-8
Response Body
Chứa dữ liệu thực sự server trả về, có thể là HTML, JSON, XML, hình ảnh, âm thanh, video, v.v.
Connection (Kết nối TCP)
HTTP/1.0: mặc định đóng kết nối sau mỗi request–response.
HTTP/1.1: hỗ trợ persistent connection (keep-alive), giữ kết nối để dùng cho nhiều request–response, giảm chi phí thiết lập lại TCP.
URL (Uniform Resource Locator)
Gồm nhiều phần: giao thức (http://), hostname (ví dụ: www.example.com), đường dẫn (path), port (mặc định là 80 nếu không chỉ định), và optional là query string (ví dụ: ?page=2&sort=asc
).
Method (Phương thức HTTP) chính
- GET: Lấy tài nguyên; không có body ở request; nên idempotent (gửi nhiều lần không thay đổi server).
- POST: Gửi dữ liệu; thường dùng để tạo mới tài nguyên; không idempotent.
- PUT: Cập nhật hoặc thay thế toàn bộ tài nguyên tại URL; idempotent.
- PATCH: Cập nhật một phần tài nguyên; idempotent.
- DELETE: Xóa tài nguyên; idempotent.
- HEAD: Tương tự GET nhưng chỉ trả header, không trả body; dùng để kiểm tra tài nguyên tồn tại hay kiểm tra headers.
- OPTIONS: Truy vấn server hỗ trợ những phương thức (methods) nào; thường dùng cho CORS.
- TRACE, CONNECT: Ít phổ biến, thường dùng cho debug, tunneling HTTP (CONNECT dùng để thiết lập kênh SSL/TLS qua proxy).
Cách thức hoạt động (Client–Server)
- Client (trình duyệt, ứng dụng di động, API client…) gửi một HTTP Request dưới dạng văn bản (trong HTTP/1.x) hoặc nhị phân (trong HTTP/2) tới server.
- Server nhận, phân tích request, thực hiện logic (tìm file tĩnh, gọi hàm xử lý động, truy vấn database…), sau đó trả về một HTTP Response.
- Client nhận response, hiển thị nội dung (render HTML, parse JSON…) hoặc tiếp tục gọi các tài nguyên liên quan (CSS, JS, hình ảnh…).
So sánh HTTP và HTTPS
Đặc điểm | HTTP | HTTPS |
---|---|---|
Bảo mật | Dữ liệu truyền plaintext, dễ bị nghe lén, giả mạo. | Dữ liệu mã hóa bằng TLS/SSL, đảm bảo bảo mật. |
Port mặc định | 80 | 443 |
Handshake | Chỉ TCP handshake (3 bước). | TCP handshake + TLS handshake (2–3 round trip). |
Chứng chỉ | Không sử dụng. | Cần certificate X.509 do CA cấp. |
Hiệu năng | Nhanh hơn về handshake. | Chậm hơn một chút nhưng được cải thiện qua HTTP/2, HTTP/3. |
SEO/UX | Thấp hơn; trình duyệt cảnh báo “Not Secure” nếu có form. | Cao hơn; hiện ổ khóa, tin cậy hơn, ưu tiên xếp hạng. |
Mục đích sử dụng | Trang web tĩnh, nội dung phi nhạy cảm. | Trang cần bảo mật thông tin, e-commerce, Banking, API. |