Welcome!

By registering with us, you'll be able to discuss, share and private message with other members of our community.

SignUp Now!

Forum Overview New Posts

Cách mạng Internet vận hành Phần 2: HTTP – "Ngôn Ngữ" Của Web

Joined
Jun 11, 2025
Messages
9
Trong Phần 1, chúng ta đã khám phá Mô hình OSI và hiểu rằng Internet hoạt động theo nhiều lớp khác nhau. Hôm nay, chúng ta sẽ đi sâu vào một trong những giao thức quan trọng nhất ở Lớp 7 (Ứng dụng), lớp mà chúng ta tương tác trực tiếp hằng ngày: HTTP.

HTTP là gì? 🤔

HTTP (Hypertext Transfer Protocol) là giao thức nền tảng cho World Wide Web. Hãy nghĩ nó như là "ngôn ngữ" 🗣️ mà các trình duyệt web (như Chrome, Firefox) và các máy chủ web (nơi lưu trữ các trang web) sử dụng để giao tiếp với nhau. Khi bạn gõ một địa chỉ website vào trình duyệt hoặc nhấp vào một liên kết, chính HTTP đang làm việc đằng sau hậu trường để mang nội dung đến cho bạn.
Về cơ bản, HTTP là một giao thức client-server. Điều này có nghĩa là:
  • Client (Máy khách): Thường là trình duyệt web của bạn 💻, gửi một yêu cầu (request) đến máy chủ.
  • Server (Máy chủ): Nơi trang web được lưu trữ 🖥️, nhận yêu cầu và gửi lại một phản hồi (response) chứa nội dung bạn muốn xem.

HTTP hoạt động như thế nào? 🚀

Quá trình hoạt động của HTTP có thể được hình dung qua các bước đơn giản sau:
  1. Bạn yêu cầu một tài nguyên: Khi bạn nhập một URL (Uniform Resource Locator) vào trình duyệt và nhấn Enter, trình duyệt của bạn sẽ tạo ra một yêu cầu HTTP ✉️ để lấy tài nguyên cụ thể đó.
  2. Yêu cầu được gửi đến máy chủ:Đây là bước quan trọng mà chúng ta sẽ đi sâu hơn. Sau khi trình duyệt tạo yêu cầu HTTP, nó không trực tiếp gửi yêu cầu này đến máy chủ. Thay vào đó, yêu cầu này sẽ trải qua một quá trình đóng gói và truyền tải qua nhiều lớp giao thức khác nhau trong mô hình mạng (tưởng tượng như đóng gói một lá thư vào nhiều phong bì khác nhau để gửi đi):
    • Từ Lớp 7 (Ứng dụng) xuống Lớp 4 (Giao vận): Yêu cầu HTTP của bạn sẽ được chuyển xuống lớp Giao vận, nơi nó thường được giao cho TCP (Transmission Control Protocol). TCP sẽ chia yêu cầu HTTP thành các phân đoạn (segments) nhỏ hơn. TCP cũng thêm các thông tin cần thiết để đảm bảo dữ liệu được gửi đi đáng tin cậy và theo đúng thứ tự đến đúng ứng dụng trên máy chủ đích. 📦
    • Từ Lớp 4 (Giao vận) xuống Lớp 3 (Mạng): Các phân đoạn TCP sau đó được chuyển xuống lớp Mạng. Tại đây, chúng được đóng gói thành các gói (packets) IP (Internet Protocol). IP sẽ thêm vào địa chỉ IP nguồn (của máy bạn) và địa chỉ IP đích (của máy chủ web). Địa chỉ IP này giống như địa chỉ nhà 🏠, giúp gói tin tìm được đường đi trên Internet.
    • Từ Lớp 3 (Mạng) xuống Lớp 2 (Liên kết dữ liệu): Các gói IP được chuyển xuống lớp Liên kết dữ liệu. Ở đây, chúng được đóng gói vào các khung (frames). Lớp này thêm vào địa chỉ MAC (Media Access Control) của thiết bị mạng tiếp theo trên đường đi. Địa chỉ MAC là địa chỉ vật lý duy nhất của card mạng. 🖼️
    • Từ Lớp 2 (Liên kết dữ liệu) xuống Lớp 1 (Vật lý): Cuối cùng, các khung dữ liệu này được chuyển thành các tín hiệu điện ⚡, ánh sáng hoặc sóng vô tuyến (dưới dạng các bit 0 và 1) và được truyền đi qua phương tiện vật lý (cáp mạng, Wi-Fi). 🔌📶
    • Quá trình này cứ thế tiếp diễn qua các router và switch trên Internet, mỗi thiết bị sẽ đọc thông tin ở các lớp tương ứng của nó để chuyển tiếp gói tin đến đích, cho đến khi nó đến được máy chủ web. 🛤️
  3. Máy chủ xử lý yêu cầu: Máy chủ nhận và phân tích cú pháp yêu cầu, xác định tài nguyên được yêu cầu và hành động cần thực hiện. 🧠
  4. Máy chủ gửi phản hồi: Máy chủ tạo ra một phản hồi HTTP 📧. Phản hồi này bao gồm mã trạng thái, các tiêu đề và phần thân chứa dữ liệu của tài nguyên được yêu cầu (nếu có).
  5. Client nhận và xử lý: Trình duyệt của bạn nhận phản hồi, phân tích cú pháp, và hiển thị hoặc xử lý nội dung tương ứng. 💡

Cấu trúc một mẫu tin HTTP 📜

Đây là cấu trúc một mẫu tin HTTP mà các thiết bị phần cứng hoặc phần mềm ở lớp thấp hơn sẽ nhận được.

Mẫu tin Yêu cầu HTTP (HTTP Request)​


Code:
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate, br
Connection: keep-alive

Mẫu tin Phản hồi HTTP (HTTP Response)​

Code:
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 1234
Date: Wed, 18 Jun 2025 04:00:00 GMT
Server: Apache/2.4.41 (Ubuntu)
Last-Modified: Tue, 17 Jun 2025 10:00:00 GMT

<!DOCTYPE html>
<html>
<head>
    <title>Chào mừng!</title>
</head>
<body>
    <h1>Đây là trang web của bạn.</h1>
    <p>Nội dung trang web...</p>
</body>
</html>


Các Phương thức HTTP 🛠️

Phương thức HTTP (HTTP Method) là một phần của dòng bắt đầu trong yêu cầu HTTP, chỉ định hành động mà client muốn thực hiện trên tài nguyên được xác định bởi URL. Các phương thức phổ biến bao gồm:
  • GET:
    • Mục đích: Yêu cầu lấy dữ liệu từ tài nguyên được chỉ định. 📥
    • Đặc điểm: An toàn (không thay đổi trạng thái của máy chủ), và Idempotent (gửi nhiều lần vẫn cho cùng một kết quả).
    • Ví dụ: Khi bạn nhập một URL vào trình duyệt, trình duyệt sẽ gửi yêu cầu GET để lấy nội dung của trang đó.
  • POST:
    • Mục đích: Gửi dữ liệu để tạo một tài nguyên mới trên máy chủ, hoặc gửi dữ liệu để xử lý bởi tài nguyên đã xác định. 📤
    • Đặc điểm: Không an toàn (có thể thay đổi trạng thái của máy chủ), và không Idempotent (gửi nhiều lần có thể tạo ra các tài nguyên trùng lặp hoặc kết quả khác nhau).
    • Ví dụ: Khi bạn điền và gửi một biểu mẫu đăng ký hoặc biểu mẫu bình luận trên website.
  • PUT:
    • Mục đích: Gửi dữ liệu để cập nhật hoặc thay thế hoàn toàn một tài nguyên đã tồn tại bằng dữ liệu mới được cung cấp. Nếu tài nguyên không tồn tại, nó có thể tạo mới tài nguyên đó. 🔄
    • Đặc điểm: Không an toàn, nhưng Idempotent (gửi nhiều lần cùng một yêu cầu PUT sẽ chỉ dẫn đến một tài nguyên duy nhất được cập nhật).
    • Ví dụ: Cập nhật thông tin chi tiết của một sản phẩm trong cơ sở dữ liệu bằng cách gửi toàn bộ dữ liệu mới.
  • DELETE:
    • Mục đích: Yêu cầu xóa tài nguyên được chỉ định. 🗑️
    • Đặc điểm: Không an toàn, nhưng Idempotent (xóa một tài nguyên nhiều lần vẫn chỉ có tác dụng xóa một lần).
    • Ví dụ: Xóa một bài viết trên blog hoặc một mặt hàng khỏi giỏ hàng.

Các mã trạng thái (Status Code) của HTTP 🚦

Mã trạng thái HTTP là một con số gồm ba chữ số do máy chủ gửi về trong phản hồi để chỉ thị kết quả hoặc trạng thái của yêu cầu đã nhận. Chúng được phân loại thành năm nhóm chính, mỗi nhóm biểu thị một loại kết quả khác nhau:
  • 1xx (Thông tin - Informational): Yêu cầu đã được nhận và quá trình đang được tiếp tục. ℹ️
    • 100 Continue: Máy khách nên tiếp tục gửi phần còn lại của yêu cầu.
    • 101 Switching Protocols: Máy chủ đang chuyển sang một giao thức khác theo yêu cầu của máy khách.
  • 2xx (Thành công - Success): Yêu cầu đã được máy chủ nhận, hiểu và xử lý thành công. ✅
    • 200 OK: Yêu cầu đã được xử lý thành công. Đây là mã phổ biến nhất.
    • 201 Created: Yêu cầu đã thành công và một tài nguyên mới đã được tạo.
    • 204 No Content: Yêu cầu thành công, nhưng không có nội dung nào để gửi về.
    • 206 Partial Content: Máy chủ đã trả về một phần của tài nguyên.
  • 3xx (Chuyển hướng - Redirection): Cần có thêm hành động để hoàn tất yêu cầu. ➡️
    • 301 Moved Permanently: Tài nguyên đã được di chuyển vĩnh viễn.
    • 302 Found (Previously "Moved Temporarily"): Tài nguyên tạm thời nằm ở một URL khác.
    • 304 Not Modified: Tài nguyên chưa được sửa đổi (sử dụng cache).
  • 4xx (Lỗi từ Client - Client Error): Máy chủ không thể hoặc sẽ không xử lý yêu cầu do lỗi từ phía client. ❌
    • 400 Bad Request: Cú pháp yêu cầu không hợp lệ.
    • 401 Unauthorized: Yêu cầu cần xác thực.
    • 403 Forbidden: Máy chủ từ chối cấp quyền truy cập.
    • 404 Not Found: Không tìm thấy tài nguyên. (Lỗi quen thuộc nhất! 😟)
    • 405 Method Not Allowed: Phương thức HTTP không được phép.
  • 5xx (Lỗi từ Server - Server Error): Máy chủ không thể thực hiện yêu cầu hợp lệ. Điều này cho thấy có vấn đề từ phía máy chủ. 💥
    • 500 Internal Server Error: Lỗi chung của máy chủ.
    • 502 Bad Gateway: Máy chủ proxy nhận phản hồi không hợp lệ.
    • 503 Service Unavailable: Máy chủ hiện không khả dụng (quá tải/bảo trì).
    • 504 Gateway Timeout: Máy chủ proxy không nhận được phản hồi kịp thời.

HTTP là một giao thức tuy có vẻ đơn giản nhưng lại là xương sống của World Wide Web, cho phép bạn tiếp cận vô vàn thông tin trên Internet. Việc hiểu về các phương thức HTTP, cấu trúc tin nhắn và các mã trạng thái HTTP giúp chúng ta nắm bắt sâu hơn cách thức hoạt động của một phần quan trọng trong "cách mạng Internet".
 
Last edited:
Back
Top