Giao thức HTTP
Back To Blogshttp://
hay https://
. Thông qua bài viết này chúng ta sẽ tìm hiểu về những điều cơ bản của HTTP.1. HTTP là gì?
HTTP là viết tắt của Hyper Text Transfer Protocol (Giao thức Truyển tải Siêu văn bản hay còn gọi là văn bản có cấu trúc) được dùng trong www (world wide web) với mục đích tạo nền tảng kết nối máy chủ (server) và máy khách (client) trong cùng một hệ thống mạng.
HTTP được sử dụng rộng rãi trong việc truy cập các trang web trên Internet. Khi bạn nhập một địa chỉ web vào trình duyệt, trình duyệt sẽ gửi một yêu cầu HTTP đến máy chủ web, và máy chủ web sẽ trả về một phản hồi HTTP chứa mã HTML của trang web đó. Trình duyệt sẽ đọc mã HTML và hiển thị trang web cho bạn xem. Bạn có thể thấy các yêu cầu và phản hồi HTTP bằng cách sử dụng công cụ kiểm tra mạng (network inspector) của trình duyệt.
Nó là nền tảng của bất kỳ trao đổi dữ liệu nào trên Web và nó là giao thức máy khách-máy chủ, có nghĩa là các yêu cầu được bắt đầu bởi người nhận, thường là trình duyệt Web. Một tài liệu hoàn chỉnh thường được xây dựng từ các tài nguyên như nội dung văn bản, hướng dẫn bố cục, hình ảnh, video, tập lệnh, v.v.
- Internet là hệ thống mạng kết nối các thiết bị điện tử và mạng máy tính trên toàn thế giới. Nó cho phép chúng ta có thể truyền tải và chia sẻ thông tin một cách nhanh chóng, hiệu quả.
- Trang web (Web Document) bao gồm các thành phần: văn bản, hình ảnh, video, quảng cáo, và các tệp CSS để định dạng giao diện.
- Khi trình duyệt người dùng tải trang, nó gửi nhiều yêu cầu (requests) đến các máy chủ khác nhau để lấy tài nguyên.
- Máy chủ (Server) là một máy tính được kết nối với mạng máy tính hoặc Internet, có IP tĩnh, có năng lực xử lý cao. Trên đó người ta cài đặt các phần mềm để phục vụ cho các máy tính khác truy cập để yêu cầu cung cấp các dịch vụ và tài nguyên. Hay nói đơn giản thì máy chủ cũng là một máy tính, nhưng được thiết kế với nhiều tính năng vượt trội hơn, năng lực lưu trữ và xử lý dữ liệu cũng lớn hơn máy tính thông thường rất nhiều.
- GET index.html:
Trình duyệt gửi yêu cầu đến web server để lấy tệp HTML (cấu trúc chính của trang).
Đây là bước đầu tiên trong việc tải trang web.
- GET styles.css:
Yêu cầu đến web server để tải tệp CSS, định dạng giao diện trang web.
Tệp CSS quyết định cách văn bản, hình ảnh, và các phần tử khác hiển thị.
- GET header.png (Image):
Hình ảnh được yêu cầu từ web server, được chèn vào vị trí chỉ định trong tệp HTML.
- GET video.mp4 (Video):
Video được tải từ một video server riêng biệt.
Điều này thường được sử dụng để lưu trữ các tệp lớn (như video) trên các máy chủ tối ưu hóa cho phương tiện truyền thông.
- GET advert.jpg (Advertisement):
Quảng cáo được tải từ một ad server (máy chủ quảng cáo).
Đây là cách các quảng cáo được hiển thị trên trang web, thường từ các máy chủ bên thứ ba.
Máy khách và máy chủ giao tiếp bằng cách trao đổi các tin nhắn riêng lẻ (trái ngược với một luồng dữ liệu). Các tin nhắn do máy khách gửi được gọi là yêu cầu và các tin nhắn do máy chủ gửi dưới dạng câu trả lời được gọi là phản hồi.
Hình ảnh trên là sơ đồ minh họa kiến trúc của web, từ lớp thấp nhất (IP layer) đến lớp ứng dụng và client.
- IP Layer (Internet Protocol Layer)
IP (Internet Protocol): Đây là lớp thấp nhất, chịu trách nhiệm định tuyến và truyền dữ liệu giữa các thiết bị qua mạng.
UDP (User Datagram Protocol): Giao thức không kết nối, thường được dùng cho các ứng dụng yêu cầu tốc độ hơn là độ tin cậy (ví dụ: streaming video, audio).
TCP (Transmission Control Protocol): Giao thức kết nối, đảm bảo dữ liệu được truyền đến đúng nơi và theo đúng thứ tự.
- Application/Transport Layer
DNS (Domain Name System): Chuyển đổi tên miền (ví dụ: www.example.com) thành địa chỉ IP.
TLS (Transport Layer Security): Đảm bảo kết nối an toàn bằng cách mã hóa dữ liệu truyền qua mạng.
HTTP (HyperText Transfer Protocol): Giao thức truyền tải siêu văn bản, dùng để giao tiếp giữa trình duyệt (client) và máy chủ web.
- Client Layer
HTML (HyperText Markup Language): Ngôn ngữ dùng để tạo cấu trúc và nội dung của một trang web.
CSS (Cascading Style Sheets): Ngôn ngữ định kiểu dùng để định dạng giao diện và bố cục trang web.
JavaScript: Ngôn ngữ lập trình phía client dùng để thêm tính tương tác và động cho trang web.
Web APIs: Các giao diện lập trình ứng dụng được cung cấp bởi trình duyệt để JavaScript có thể tương tác với các tính năng của thiết bị hoặc dịch vụ khác.
- Liên kết giữa các lớp
IP Layer: Xử lý truyền tải dữ liệu cơ bản qua mạng.
Application/Transport Layer: Định tuyến, bảo mật và định danh nội dung web thông qua DNS, TLS, và HTTP.
Client Layer: Là phần người dùng tương tác trực tiếp, kết hợp HTML, CSS, JavaScript, và Web APIs để hiển thị trang web.
2. Đặc điểm quan trọng của HTTP
- Tính đơn giản của HTTP
Giao thức HTTP thường được thiết kế với sự đơn giản và thân thiện đối với người đọc, ngay cả khi có thêm sự phức tạp được tích hợp trong HTTP/2 thông qua việc đóng gói các HTTP message thành các frame.
Với HTTP message, việc đọc và hiểu các thông điệp trở nên dễ dàng, cung cấp khả năng kiểm thử cao hơn cho các nhà phát triển và giảm thiểu độ phức tạp đối với người mới sử dụng.
- Khả năng mở rộng của HTTP
Tính năng header HTTP đã được giới thiệu trong HTTP/1.0 đã tạo điều kiện thuận lợi cho việc mở rộng và thử nghiệm giao thức. Các chức năng mới có thể dễ dàng được giới thiệu bằng một thỏa thuận thống nhất giữa client và máy chủ về ý nghĩa của một header mới.
- Tính stateless nhưng không phải sessionless của HTTP
HTTP là stateless: không có liên kết giữa hai yêu cầu được thực hiện liên tiếp trên cùng một kết nối. Điều này ngay lập tức có khả năng gây ra vấn đề cho người dùng cố gắng tương tác với một số trang nhất định một cách mạch lạc, ví dụ, sử dụng giỏ hàng thương mại điện tử. Nhưng trong khi cốt lõi bản thân HTTP là stateless, các cookie HTTP cho phép sử dụng các session trạng thái. Sử dụng khả năng mở rộng header, các cookie HTTP được thêm vào quy trình vận hành, cho phép tạo các session trên mỗi yêu cầu HTTP để chia sẻ cùng 1 ngữ cảnh hay cùng 1 trạng thái.
3. Cấu trúc cơ bản của HTTP
HTTP là giao thức máy khách-máy chủ: các yêu cầu được gửi bởi một thực thể, tác nhân người dùng (hoặc proxy thay mặt cho nó). Hầu hết thời gian tác nhân người dùng là một trình duyệt Web, nhưng nó có thể là bất cứ thứ gì.
Mỗi yêu cầu riêng lẻ được gửi đến một máy chủ, máy chủ này xử lý nó và cung cấp một câu trả lời được gọi là phản hồi. Giữa máy khách và máy chủ có rất nhiều thực thể, được gọi chung là proxy, thực hiện các hoạt động khác nhau và hoạt động như cổng hoặc bộ nhớ đệm.
Trên thực tế, có nhiều máy tính hơn giữa trình duyệt và máy chủ xử lý yêu cầu: có bộ định tuyến, modem, v.v. Nhờ thiết kế nhiều lớp của Web, chúng được ẩn trong các lớp mạng và truyền tải. HTTP ở trên cùng, ở lớp ứng dụng. Mặc dù quan trọng để chẩn đoán các vấn đề mạng, các lớp cơ bản hầu như không liên quan đến mô tả của HTTP.
- Client
Là bất kỳ công cụ nào hoạt động thay mặt cho người dùng. Vai trò này chủ yếu được thực hiện bởi trình duyệt Web, nhưng nó cũng có thể được thực hiện bởi các chương trình được sử dụng bởi các kỹ sư và nhà phát triển Web để gỡ lỗi ứng dụng của họ.
Để hiển thị một trang Web, trình duyệt gửi một yêu cầu ban đầu để tìm nạp tài liệu HTML đại diện cho trang. Sau đó, nó phân tích cú pháp tệp này, thực hiện các yêu cầu bổ sung tương ứng với các tập lệnh thực thi, thông tin bố cục (CSS) để hiển thị và các tài nguyên phụ có trong trang (thường là hình ảnh và video). Sau đó, trình duyệt Web kết hợp các tài nguyên này để trình bày tài liệu hoàn chỉnh, trang Web. Các tập lệnh được thực thi bởi trình duyệt có thể tìm nạp nhiều tài nguyên hơn trong các giai đoạn sau và trình duyệt cập nhật trang Web cho phù hợp.
- Server
Phục vụ tài liệu theo yêu cầu của khách hàng. Một máy chủ hầu như chỉ xuất hiện như một máy duy nhất; Nhưng nó thực sự có thể là một tập hợp các máy chủ chia sẻ tải (cân bằng tải) hoặc phần mềm khác (chẳng hạn như bộ nhớ đệm, máy chủ cơ sở dữ liệu hoặc máy chủ thương mại điện tử), tạo toàn bộ hoặc một phần tài liệu theo yêu cầu.
Một máy chủ không nhất thiết phải là một máy duy nhất, nhưng một số phiên bản phần mềm máy chủ có thể được lưu trữ trên cùng một máy. Với HTTP/1.1 và tiêu đề Host, chúng thậm chí có thể chia sẻ cùng một địa chỉ IP.
- Proxy
Giữa client và server, nhiều máy tính và máy móc chuyển tiếp các thông báo HTTP. Do cấu trúc phân lớp của ngăn xếp Web, hầu hết chúng hoạt động ở cấp độ truyền tải, mạng hoặc vật lý, trở nên minh bạch ở lớp HTTP và có khả năng có tác động đáng kể đến hiệu suất. Những người hoạt động ở các lớp ứng dụng thường được gọi là proxy. Proxy có thể thực hiện nhiều chức năng: bộ nhớ đệm, lọc (như quét virus), cân bằng tải (cho phép máy chủ phục vụ các yêu cầu khác nhau), xác thực (để kiểm soát quyền truy cập), ghi nhật ký (lưu trữ thông tin lịch sử)
4. Một số lỗi phổ biến của HTTP
- Lỗi 400 Bad Request xảy ra khi máy chủ không thể xử lý yêu cầu do yêu cầu không hợp lệ hoặc có vấn đề về cú pháp.
- Lỗi 401 Unauthorized xuất hiện khi yêu cầu yêu cầu xác thực, nhưng không được cung cấp hoặc không hợp lệ.
- Lỗi 403 Forbidden xảy ra khi máy chủ từ chối yêu cầu, thường do vấn đề phân quyền hoặc chính sách bảo mật.
- Lỗi 404 Not Found thông báo rằng tài nguyên yêu cầu không tồn tại trên máy chủ.
- Lỗi 504 Gateway Timeout xảy ra khi máy chủ cổng không nhận được phản hồi kịp thời từ máy chủ phía sau.
5. Tóm lại
Trên đây là những kiến thức cơ bản về giao thức HTTP, hy vọng bạn có thể bắt đầu sử dụng nó một cách hiệu quả. Tuy nhiên, HTTP là một giao thức liên tục được phát triển và mở rộng. Do đó, hãy luôn cập nhật những thông tin mới nhất để có thể tận dụng tối đa lợi ích của nó.