Bài Viết về Giao Thức Mạng và WebServer
Bài viết này được trích dẫn từ trang web. Nội dung bài viết dài khoảng 4000 từ, vì vậy hãy xem trên máy tính để có trải nghiệm tốt nhất. Nếu bạn đang đọc trên điện thoại, hãy ghi chú và mở máy tính để tiếp tục nhé.
Mở Bài
Trong các bài viết trước, chúng ta đã cùng nhau xây dựng Client và Server, và thực hành với bài toán tính bình phương một số. Trong phần này, chúng ta sẽ cùng nhau tìm hiểu về giao thức mạng.
Giao Thức Mạng
Để nhắc lại: Trong các phần trước, chúng ta đã triển khai một ứng dụng Client và Server, trong đó Client nhập một số và Server trả về bình phương của số đó. Nếu người dùng nhập số 0, kết nối sẽ được đóng lại.
Bài toán ở trên khá đơn giản chỉ với một phép toán. Tuy nhiên, trong thực tế, có rất nhiều cách để giao tiếp, từ phép cộng, trừ, nhân, chia cho đến những cuộc trò chuyện phức tạp hơn. Để thực hiện những điều đó, con người đã phát minh ra ngôn ngữ giao tiếp.
Trong mạng máy tính, khi hai máy tính trao đổi thông tin, chúng cũng cần phải sử dụng ngôn ngữ, được gọi là giao thức. Trong thế giới mạng máy tính, có rất nhiều giao thức khác nhau.
Socket - Chiếc Điện Thoại Kết Nối
Như đã đề cập trong các bài viết trước, Socket giống như chiếc điện thoại; chúng ta sử dụng điện thoại để liên lạc với nhau, còn các máy tính sử dụng Socket để giao tiếp với nhau.
Chúng ta, những người sử dụng, không cần quan tâm đến cách mà hai chiếc điện thoại kết nối hay dữ liệu được chuyển tải như thế nào. Chúng ta chỉ cần sử dụng nó.
Và trong tương tự, các ứng dụng mạng cũng sử dụng một phương thức nào đó để giao tiếp qua “chiếc điện thoại” - Socket - mà không cần bận tâm về cách kết nối hay truyền tải dữ liệu.
Cũng như có nhiều ngôn ngữ trong đời sống hàng ngày, trong mạng máy tính có rất nhiều giao thức. Khi hai ứng dụng sử dụng chung một giao thức, chúng có thể hiểu được nhau.
Trong bài viết này, chúng ta sẽ cùng tìm hiểu một giao thức rất phổ biến: HTTP.
Lịch Sử và Khái Niệm về HTTP
HTTP (HyperText Transfer Protocol) ra đời khoảng những năm 80-90 của thế kỷ trước, do nhà khoa học người Anh Tim Berners-Lee phát minh. Ông đã tạo ra một mạng lưới thông tin cho phép mọi người truy cập thông tin một cách tự do. Để thực hiện điều này, ông phát triển ngôn ngữ HTML (HyperText Markup Language) và trình duyệt web đầu tiên: WorldWideWeb. Để truyền tải HTML giữa các máy tính, HTTP cũng được sáng chế.
Ban đầu, HTTP chỉ được sử dụng để vận chuyển HTML giữa Client và Server, nhưng thực tế cho thấy rằng HTTP không bị giới hạn chỉ trong HTML, mà có thể vận chuyển bất kỳ dạng dữ liệu nào.
Các Phiên Bản của HTTP
Hiện nay, đã có nhiều phiên bản HTTP được phát hành, bao gồm:
- HTTP/0.9 (1991)
- HTTP/1.0 (1996)
- HTTP/1.1 (1997, cập nhật 1999 và 2014)
- HTTP/2 (2015)
- HTTP/3 (2020)
Trong bài viết này, chúng ta sẽ tìm hiểu về HTTP/1.1.
Cách Thức Giao Tiếp của HTTP
HTTP sử dụng hình thức giao tiếp Request-Response, nghĩa là một bên gửi yêu cầu (Request) và bên kia sẽ đáp lại yêu cầu đó (Response). Điều này được biểu diễn qua cặp Request và Response.
Cấu Trúc của HTTP
Giống như ngôn ngữ tự nhiên có ngữ pháp, HTTP cũng có cấu trúc của nó bao gồm hai phần chính: Header và Body. Header là phần bắt buộc và được phân chia thành Start-Line và Request-Headers.
HTTP Header
HTTP Header chứa các dòng dữ liệu, trong đó dòng đầu tiên là Start-Line (Request-Line cho Request và Status-Line cho Response).
Request-Line
Request-Line có dạng:
METHOD TARGET VERSION
- Method: (Ví dụ: GET, POST)
- Target: (thường là một URI)
- Version: (phiên bản HTTP đang sử dụng)
Status-Line
Đối với Response, Status-Line có dạng:
VERSION CODE TEXT
- Version: (phiên bản HTTP Server sử dụng)
- Code: (trạng thái của phản hồi như 200, 404, 500)
- Text: (mô tả trạng thái với ngôn ngữ dễ hiểu)
Request/Response Headers
Dưới Start-Line là các dòng Key:Value biểu thị các thông số của Request/Response.
HTTP Body
Khi Server trả về Response, hoặc khi Client muốn gửi dữ liệu lên Server, dữ liệu sẽ được biểu diễn trong Body của HTTP Request.
HTTP Chỉ Là Những Dòng Text Có Quy Ước
HTTP chỉ là những quy tắc định sẵn, và chúng ta có thể tùy biến theo ý thích. Tuy nhiên, để có thể giao tiếp với các hệ thống khác, ta cần tuân theo các quy ước đó.
Các Loại Giao Thức: Text-based và Binary-based
HTTP là một text-based protocol rất thân thiện với con người, nhưng lại chiếm nhiều tài nguyên. Ngược lại, Binary-based protocol gọn nhẹ và nhanh hơn trong việc truyền tải và parse dữ liệu.
Web Server
Nếu máy chủ hỗ trợ giao thức HTTP, chúng ta gọi đó là Web Server. Trong phần này, chúng ta sẽ tạo một Web Server đơn giản để tính bình phương một số.
HTTP Parser
Để hiểu thông tin từ HTTP, ta cần một chương trình để parse dữ liệu. Chúng ta sẽ viết một Web Server cơ bản hỗ trợ phương thức GET.
Kết Luận
Tổng kết lại, HTTP là một giao thức quan trọng trong việc phát triển ứng dụng web và đã giúp chúng ta xây dựng một Web Server đơn giản để tính bình phương một số. Hy vọng bạn sẽ tìm thấy thông tin trong bài viết này hữu ích và mở rộng hiểu biết của mình về mạng máy tính.
Link gốc bài viết: trang web.
source: viblo