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)

  1. 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.
  2. 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.
  3. 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.

 

About the Author

Đức Phát

View all author's posts

Leave a Comment

Your email address will not be published. Required fields are marked *

Bài viết khác

Web Security

Khái niệm Web Security Web Security là tập hợp các nguyên tắc, biện pháp và công nghệ nhằm bảo vệ website, ứng dụng web và dữ liệu khỏi các hành vi truy cập trái phép, tấn công độc hại hoặc khai thác lỗ hổng. Nó không chỉ bao gồm việc ngăn chặn hacker, mà còn […]

Markdown

Markdown là một ngôn ngữ đánh dấu nhẹ (lightweight markup language) dùng để định dạng văn bản thuần túy (plain text), thường được sử dụng trong các tài liệu như README, bài viết blog, tài liệu hướng dẫn, và cả trong GitHub, Stack Overflow, hoặc các trình soạn thảo như VS Code, Obsidian… Markdown được […]

CSS

CSS (Cascading Style Sheets – tạm dịch: Tập tin định kiểu tầng) là ngôn ngữ dùng để mô tả cách trình bày (giao diện) của một tài liệu HTML. Nói đơn giản, CSS giúp làm đẹp trang web: chỉnh màu sắc, font chữ, bố cục, khoảng cách, hiệu ứng chuyển động, v.v. CSS được phát […]

HTML

HTML (HyperText Markup Language) là ngôn ngữ đánh dấu siêu văn bản, được dùng để xây dựng cấu trúc của một trang web. Nói cách khác, HTML cho trình duyệt biết nội dung nào sẽ hiển thị và hiển thị như thế nào (như tiêu đề, đoạn văn, hình ảnh, liên kết…). Một tài liệu […]

Browser

Browser (Web Browser, Trình duyệt web) là phần mềm trên máy tính, điện thoại hoặc thiết bị thông minh, cho phép người dùng truy cập, hiển thị và tương tác với các trang web, tài nguyên Internet. Về bản chất, trình duyệt gửi các yêu cầu (HTTP/HTTPS request) đến máy chủ web, nhận về mã […]

Tìm hiểu DNS

DNS là gì? DNS (Domain Name System) là một dịch vụ phân giải tên miền, giúp chuyển đổi các tên miền (ví dụ: www.ducphat.com) thành địa chỉ IP (ví dụ: 93.184.216.34) và ngược lại. Thay vì phải nhớ dãy số IP, chúng ta chỉ cần nhập tên miền, DNS sẽ tìm kiếm địa chỉ IP […]