Liệu bạn đã từng nghe đến khái niệm HTTP trước đây? Đó là cái gì mà chúng ta luôn gặp khi sử dụng trình duyệt để truy cập Internet, đúng không? Chắc chắn các bạn đã quen thuộc với việc thấy địa chỉ web bắt đầu bằng http://
hoặc https://
. Vậy hôm nay, thông qua bài viết này, HEFC sẽ giới thiệu cho các bạn về những khía cạnh cơ bản của giao thức HTTP.
HTTP Là Gì?
Một cách đơn giản, HTTP là viết tắt của “Hyper Text Transfer Protocol”, có nghĩa là “Giao thức Truyền tải Siêu Văn Bản”. Nó là giao thức sử dụng trong World Wide Web (www) để tìm nạp tài nguyên, ví dụ như các tài liệu HTML. HTTP là nền tảng của mọi hoạt động truyền dữ liệu trên Web, là giao thức kết nối giữa client (thường là trình duyệt hoặc bất kỳ loại thiết bị/ứng dụng nào) và server (thường là máy tính đám mây). Nó cho phép tải về các tài liệu khác nhau và xây dựng một trang web hoàn chỉnh từ các tài liệu con như văn bản, layout, hình ảnh, video, script và nhiều hơn nữa.
HTTP được thiết kế từ những năm 90 và đã phát triển theo thời gian. Nó là một giao thức ứng dụng được gửi qua giao thức truyền tải TCP/IP hoặc qua một kết nối TCP được mã hóa TLS. Tuy nhiên, trong lý thuyết, bất kỳ giao thức truyền tải đáng tin cậy nào cũng có thể được sử dụng. Nhờ vào khả năng mở rộng của nó, HTTP không chỉ cho phép tải về các tài liệu siêu văn bản mà còn hình ảnh, video và cả tải lên nội dung lên server, ví dụ như các kết quả form HTML. Ngoài ra, HTTP cũng có thể tìm nạp các phần của trang web để cập nhật theo yêu cầu.
Khía Cạnh Cơ Bản Của HTTP
HTTP là gì? Mặc dù HTTP đơn giản, nhưng nó cung cấp những khả năng mạnh mẽ nhờ vào những đặc trưng cơ bản sau đây.
HTTP Đơn Giản
HTTP được thiết kế để đơn giản và thân thiện với con người, ngay cả khi có sự phức tạp được giới thiệu trong HTTP/2 bằng cách đóng gói các thông điệp HTTP thành các frame. Với các thông điệp HTTP, chúng ta có thể đọc và hiểu được nội dung của chúng, cung cấp khả năng kiểm tra và giảm thiểu độ phức tạp cho người mới.
HTTP Có Thể Mở Rộng
HTTP/1.0 đã giới thiệu các tiêu đề HTTP, làm cho giao thức này dễ dàng mở rộng và thử nghiệm hơn. Chức năng mới có thể được giới thiệu bằng cách đơn giản thỏa thuận về ý nghĩa của một tiêu đề mới giữa client và server.
HTTP Là Stateless, Nhưng Không Sessionless
HTTP là giao thức không lưu trạng thái giữa các 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 có thể gây khó khăn cho người dùng khi muốn tương tác một cách liên tục với một vài trang cụ thể, ví dụ như việc sử dụng giỏ hàng trên các trang thương mại điện tử.
Tuy nhiên, mặc dù HTTP về mặt cơ bản là stateless, các cookie HTTP cho phép sử dụng phiên (session) trạng thái. Sử dụng khả năng mở rộng của tiêu đề, các cookie HTTP được thêm vào quy trình hoạt động, cho phép tạo ra và chia sẻ phiên trên mỗi yêu cầu HTTP để duy trì cùng một ngữ cảnh hoặc trạng thái.
Cấu Trúc Cơ Bản Của HTTP
Qua sơ đồ dưới đây, bạn có thể thấy cấu trúc đơn giản của một ứng dụng web và vị trí cụ thể của giao thức HTTP:
Giao thức HTTP là một giao thức yêu cầu – phản hồi dựa trên cấu trúc Client – Server. Client và Server giao tiếp với nhau bằng cách trao đổi các thông điệp độc lập (không phải là một luồng dữ liệu). Thông điệp được gửi bởi client (thường là trình duyệt web) được gọi là yêu cầu (request), trong khi thông điệp được gửi bởi server được gọi là phản hồi (response).
Bạn có thể tìm hiểu thêm về các mã trạng thái HTTP – HTTP status code và hiểu rõ hơn về danh sách các mã trạng thái HTTP để biết thêm về các yêu cầu và phản hồi tại đây.
Kết Nối Của HTTP
Một kết nối HTTP được kiểm soát ở lớp truyền tải và về cơ bản nằm ngoài phạm vi của HTTP. Mặc dù HTTP không yêu cầu giao thức truyền tải phải dựa trên kết nối, nó yêu cầu giao thức đáng tin cậy hoặc không mất thông điệp (ít nhất là báo lỗi). Trong số hai giao thức truyền tải phổ biến nhất trên Internet, TCP được đánh giá là đáng tin cậy, trong khi UDP lại không. Do đó, HTTP dựa vào tiêu chuẩn TCP, một giao thức dựa trên kết nối.
Trước khi một cặp yêu cầu – phản hồi HTTP có thể được trao đổi, client và server phải thiết lập một kết nối TCP, quá trình này đòi hỏi một số vòng lặp. Hoạt động mặc định của HTTP/1.0 là mở một kết nối TCP riêng biệt cho mỗi cặp yêu cầu – phản hồi HTTP, điều này là không hiệu quả khi có nhiều yêu cầu được gửi liên tiếp.
Để giảm thiểu hạn chế này, HTTP/1.1 đã giới thiệu pipelining (mặc dù khó thực hiện) và kết nối theo dõi: kết nối TCP dưới cùng có thể được kiểm soát bằng cách sử dụng tiêu đề Connection. HTTP/2 đã tiến xa hơn bằng cách ghép thông điệp qua một kết nối duy nhất, giúp duy trì kết nối ổn định và hiệu quả hơn.
Hiện nay, đang tiến hành nhiều thí nghiệm để thiết kế một giao thức truyền tải tốt hơn phù hợp với HTTP. Ví dụ, Google đang thử nghiệm giao thức QUIC được xây dựng trên giao thức UDP để cung cấp giao thức truyền tải đáng tin cậy và hiệu quả hơn.
HEFC