Kể từ khi Internet ra đời, nhu cầu về việc trao đổi thông tin và dữ liệu giữa các máy tính đã trở nên quan trọng hơn bao giờ hết. HTTP (Hypertext Transfer Protocol) chính là giao thức tiêu chuẩn phổ biến nhất trên nền tảng này, phục vụ cho việc truy cập thông tin từ các website mà chúng ta sử dụng hàng ngày.
HTTP Là Gì?
HTTP (Hyper Text Transfer Protocol) là một giao thức chuẩn của World Wide Web, ra đời năm 1989 do Timothy Berners-Lee phát triển. Giao thức này cho phép máy tính của người dùng (client) giao tiếp với các máy chủ (server) trên toàn cầu.
Khi bạn muốn xem một nội dung trên website, bạn chỉ cần nhập địa chỉ vào trình duyệt và nhấn Enter. Máy tính của bạn sẽ thực hiện một yêu cầu HTTP để lấy thông tin từ server. Quá trình này được gọi là kiến trúc Client & Server hay Request & Response.
Request & Response
Khi HTTP ra đời, phiên bản đầu tiên (v0.9) chỉ hỗ trợ một phương thức duy nhất là GET và không có header kèm theo. Mặc dù có vẻ đơn giản, nhưng HTTP đã trải qua nhiều bước kết nối qua nhiều tầng mạng khác nhau.
Quá trình HTTP
Về cơ bản, HTTP là một “layer” phía trên TCP (Transmission Control Protocol).
Cách HTTP Hoạt Động
Một yêu cầu HTTP thường được thực hiện qua một kết nối TCP, với các bước như sau:
- Client khởi tạo kết nối TCP đến server.
- Sau khi kết nối thành công, client gửi yêu cầu đến server.
- Server nhận yêu cầu và tìm kiếm thông tin, sau đó gửi lại cho client qua kết nối TCP đã thiết lập.
- Client nhận phản hồi từ server.
- Client đóng kết nối TCP.
- Nếu cần thêm dữ liệu từ server, client sẽ lặp lại quy trình trên.
Cách HTTP hoạt động
Chú ý rằng thiết lập một kết nối TCP cần thực hiện quy trình TCP 3-Way Handshake, tức là cần có ba bước trao đổi giữa client và server trước khi kết nối được thiết lập.
Quy trình TCP 3-Way Handshake
Điều này tạo ra một điểm yếu lớn trong các phiên bản HTTP như v0.9 và 1.0, và chính vì vậy đã thúc đẩy sự phát triển lên HTTP/1.1.
HTTP/1.1: Giao Thức Tiên Tiến
Giao thức HTTP/1.1 được phát triển vào năm 1999, chính thức được áp dụng phổ biến hơn cho nhiều thiết bị và nền tảng.
HTTP/1.1 cung cấp nhiều phương thức hơn (như GET
, HEAD
, POST
, PUT
, DELETE
, TRACE
, và OPTIONS
), hỗ trợ header, và đặc biệt cho phép kết nối TCP được giữ lại (persistent connection) để phục vụ các yêu cầu tiếp theo.
HTTP Pipelining
Tính năng này cho phép nhiều yêu cầu HTTP được gửi trong một kết nối mà không cần chờ đợi phản hồi từ server. Tuy nhiên, điều này gây ra vấn đề nếu các yêu cầu đến cùng một lúc nhưng phản hồi không theo thứ tự, dẫn đến khó khăn cho client trong việc phân biệt phản hồi đến từ yêu cầu nào.
HTTP Pipelining
Ngoài ra, việc mất gói tin trong quá trình truyền tải có thể chặn toàn bộ quá trình xử lý các yêu cầu tiếp theo, dẫn đến hiện tượng TCP Head-of-line blocking (HOL).
HTTP Persistent Connection
Trong HTTP/1.1, thay vì gửi tất cả các yêu cầu một lần và đợi phản hồi lộn xộn, chúng ta có thể sử dụng HTTP keep-alive để gửi từng cặp yêu cầu/đáp ứng.
HTTP Persistent Connection
Hỗ Trợ Nén Dữ Liệu
HTTP/1.1 cũng cho phép client và server tối ưu hóa tốc độ và băng thông thông qua nén dữ liệu. Các phương pháp nén phổ biến như gzip và Deflate giúp cải thiện hiệu suất truyền tải.
Hỗ trợ Compression/Decompression
SPDY: Tiền Thân Của HTTP/2
SPDY được phát triển bởi Google với mục đích tăng tốc độ tải trang và bảo mật cho website. Một số vấn đề của HTTP/1 mà SPDY giải quyết bao gồm:
-
Single request per connection: HTTP chỉ cho phép một yêu cầu trên mỗi kết nối, gây tăng độ trễ.
-
Client-initiated requests: HTTP yêu cầu client phải gửi yêu cầu trước; SPDY cho phép server chủ động gửi dữ liệu đến client.
-
Redundant headers: Các header có thể lặp lại, tăng độ trễ và tiêu tốn băng thông.
-
Uncompressed data: SPDY bắt buộc nén dữ liệu cho mọi yêu cầu.
Nâng Cấp Với HTTP/2
HTTP/2 ra đời dựa trên công nghệ của SPDY, chính thức công bố vào năm 2015 qua RFC 7540. Dưới đây là những tính năng nổi bật của HTTP/2:
Giao Thức Nhị Phân
HTTP/2 sử dụng giao thức nhị phân thay vì văn bản, giúp phân tích dễ dàng và ít bị lỗi hơn.
HTTP/2 sử dụng binary thay cho dạng văn bản
Multiplexing Request và Response
HTTP/2 cho phép gửi nhiều yêu cầu và nhận nhiều phản hồi đồng thời mà không cần tuân thủ thứ tự. Dữ liệu được chia thành các khung dữ liệu và có thể xen kẽ trong quá trình truyền tải.
Multiplexing
Streams và Stream Prioritization
HTTP/2 cho phép tạo nhiều stream trong một kết nối, cho phép xử lý đồng thời các yêu cầu. Client có thể ưu tiên các stream theo nhu cầu.
Nén Header
HTTP/2 sử dụng HPACK để nén các header dư thừa, giúp tối ưu băng thông và tăng tốc độ tải.
Stateful Header Compression
Server Push
Server có thể gửi nhiều phản hồi cho một yêu cầu từ client, tiết kiệm thời gian và băng thông.
Server Push
Mô Phỏng Tải Hình Ảnh: HTTP/1 vs HTTP/2
Mô phỏng tải hình ảnh với HTTP/1 và HTTP/2
Trong mô phỏng, bạn sẽ thấy rằng các tệp hình ảnh nhỏ trong HTTP/1 được tải tuần tự, trong khi HTTP/2 cho phép tải đồng thời, giúp cải thiện tốc độ đáng kể.
Kết Luận
HTTP/2 đại diện cho một bước tiến quan trọng trong việc cải thiện hiệu suất và hiệu quả truyền tải dữ liệu trên web. Những cải tiến này không chỉ giúp cải thiện trải nghiệm người dùng mà còn nâng cao hiệu suất cho các trang web hiện đại.
Nếu bạn muốn tìm hiểu sâu hơn về các khái niệm liên quan đến web và công nghệ, hãy truy cập comdy.vn để khám phá thêm nhiều bài viết hữu ích khác!