Trong thế giới của máy khách và máy chủ, Request và Response tạo nên một vòng tuần hoàn không ngừng. Khi bước chân vào lĩnh vực lập trình web, không thể phớt lờ hai khái niệm quan trọng này. Vậy Request là gì? Còn Response là gì? Hãy cùng khám phá chi tiết qua bài viết dưới đây.
Điều gì là HTTP?
HTTP là viết tắt của Hypertext Transfer Protocol (Giao thức truyền tải siêu văn bản). Khi máy khách gửi yêu cầu đến máy chủ, cả hai bên này sẽ tạo nên một liên kết tương tác thông qua giao thức này.
Tổng kết, có thể nói rằng đây là nền tảng cho việc máy tính (máy khách) giao tiếp với máy tính khác (máy chủ).
HTTP Request là gì?
Khi liên kết HTTP giữa máy khách và máy chủ được thiết lập, máy khách sẽ gửi một Request (yêu cầu) dưới dạng dữ liệu nhị phân đến máy chủ, yêu cầu truy cập các file hoặc thông tin cụ thể.
Mỗi HTTP Request đều bao gồm ba phần quan trọng: Dòng Yêu Cầu (Request Line), Đầu Yêu Cầu (Request Header), và Thân Yêu Cầu (Request Body) (tuỳ chọn).
● Dòng Yêu Cầu:
- Xác định phương thức (GET, POST, PUT, DELETE, ...) để máy chủ biết xử lý thông tin hoặc tài nguyên;
- Chứa URL của Yêu Cầu sử dụng để tìm tài nguyên trên máy chủ;
- Xác định phiên bản giao thức HTTP (ví dụ: HTTP/1.0 hoặc HTTP/1.1).

● Header Yêu Cầu: Bao gồm 0 hoặc nhiều Header.
Các Header được sử dụng để truyền đạt nhiều thông tin hơn về Yêu Cầu, giúp máy chủ hiểu cách xử lý thông tin được yêu cầu bởi máy khách.
Ví dụ: Hãy xem mục Accept-Language. Nó thông báo máy chủ về ngôn ngữ ưa thích của máy khách, có thể được sử dụng để phản hồi bằng ngôn ngữ ưa thích của họ.

● Thân Yêu Cầu: Là một phần tùy chọn của
Thân Yêu Cầu sẽ truyền đi thông tin bổ sung theo yêu cầu của máy chủ để xử lý Yêu Cầu hiện tại một cách đúng đắn. Trong ví dụ đơn giản đang xét, Yêu Cầu được gửi đến máy chủ không chứa Thân này.

Phản Hồi HTTP là gì?
Ngược lại với Yêu Cầu HTTP, Phản Hồi HTTP là bản tin được máy chủ gửi đến máy khách để phản hồi Yêu Cầu trước đó của máy khách. Phản Hồi HTTP chứa thông tin được yêu cầu từ phía máy khách.
Tương tự như Yêu Cầu HTTP, Phản Hồi HTTP cũng có cấu trúc tương tự, bao gồm 3 phần: Dòng Trạng Thái, Header Phản Hồi và Thân Phản Hồi.
● Dòng Trạng Thái: Bao gồm ba thành phần:
- Phiên Bản HTTP: Phiên bản giao thức HTTP;
- Mã Trạng Thái: Mã trạng thái;
- Reason Phrase (còn được gọi là Status Text): Mô tả trạng thái.
Mã trạng thái là một con số có 3 chữ số, do máy chủ cung cấp để phản hồi Request của máy khách. Mã trạng thái của HTTP Response được phân loại thành năm lớp theo tiêu chuẩn, và lớp này được xác định bởi chữ số đầu tiên của mã trạng thái:
- 1xx: Thông tin – Request đã được tiếp nhận, quá trình tiếp tục;
- 2xx: Thành công – Request đã được tiếp nhận, hiểu và chấp nhận thành công;
- 3xx: Chuyển hướng – Cần thực hiện thêm hành động để hoàn thành Request;
- 4xx: Lỗi máy khách – Request chứa cú pháp không đúng hoặc không thể thực hiện được;
- 5xx: Lỗi máy chủ – Máy chủ không thể thực hiện được một Request hợp lệ.
Trong ví dụ về dịch vụ web thời tiết đang xét, ở phần Response, dòng đầu tiên được gọi là Status Line (như thể hiện trong hình dưới đây).
Có thể thấy dòng Status Line chứa những thông tin sau:
- Phiên bản giao thức HTTP: HTTP/1.1;
- Mã trạng thái: 200;
- Thông báo trạng thái: OK.

● Response Header: Tương tự như Request Header, Response Header cũng chứa 0 hoặc nhiều dòng Header. Tuy nhiên, rất ít khi một Response không có Header. Các Header được sử dụng để truyền thông tin bổ sung cho máy khách.
Trong Response Header như hình trên, có một Header có tên là Content-Type với giá trị là application/json; charset=utf-8. Điều này thông báo rằng máy chủ đang cho biết Body của Response sẽ chứa dữ liệu định dạng JSON.

● Response Body: Chứa dữ liệu tài nguyên được máy khách yêu cầu.
Trong ví dụ đang xét, thành phố Hyderabad yêu cầu dữ liệu về thời tiết. Hãy nhìn vào Response Body, nó chứa thông tin về thời tiết của thành phố này, bao gồm nhiệt độ, độ ẩm, mô tả thời tiết và một số thuộc tính khác.

Qua bài viết trên, mình đã giới thiệu một cách đơn giản để giúp các bạn hiểu về Request và Response trong lập trình web. Đây là hai thuật ngữ quan trọng khi phát triển trang web và ứng dụng web. Hi vọng những thông tin này sẽ hữu ích cho bạn!