- HTTP/1.0: Mỗi request mở một kết nối mới, hiệu suất thấp.
- HTTP/1.1: Giữ kết nối, pipelining, nén, caching, nhưng vẫn bị giới hạn bởi head-of-line blocking và thiếu multiplexing.
- HTTP/2: Định dạng nhị phân, multiplexing trên một kết nối duy nhất, nén header, server push, tốc độ và hiệu suất vượt trội, phù hợp với web hiện đại
- HTTP/1.0 là phiên bản đầu tiên được sử dụng rộng rãi, cho phép truyền dữ liệu giữa client và server theo mô hình request-response. Tuy nhiên, mỗi request lại phải mở một kết nối TCP mới, gây tốn tài nguyên và tăng độ trễ.
- HTTP/1.1 (ra đời năm 1999) khắc phục nhiều hạn chế của HTTP/1.0:
- Giữ kết nối (Persistent Connection): Cho phép duy trì kết nối TCP cho nhiều request liên tiếp, giảm thời gian thiết lập lại kết nối
- Pipelining: Cho phép gửi nhiều request liên tục mà không cần đợi response, tuy nhiên response vẫn phải trả về đúng thứ tự request nên vẫn bị giới hạn hiệu suất bởi hiện tượng "head-of-line blocking" (một request chậm sẽ làm chậm tất cả các request phía sau trên cùng kết nối)
- Hỗ trợ nhiều phương thức hơn: GET, POST, PUT, DELETE, HEAD, OPTIONS, TRACE...
- HEAD: Lấy header, không lấy body, dùng để kiểm tra thông tin meta của tài nguyên.
- OPTIONS: Hỏi server xem tài nguyên hỗ trợ những phương thức HTTP nào, kiểm tra các tùy chọn giao tiếp.
- TRACE: Chẩn đoán, phản hồi lại toàn bộ request để kiểm tra đường đi và các thay đổi trên request.
- Chunked transfer encoding: Server có thể gửi dữ liệu theo từng phần nhỏ, giúp cải thiện tốc độ tải trang
- Caching: Hỗ trợ cache tốt hơn với các chỉ thị như cache-control, ETag....
- Nén dữ liệu: Hỗ trợ nén nội dung trả về (Content-Encoding).
- Virtual hosting: Cho phép nhiều domain trên cùng một địa chỉ IP
Nhược điểm lớn của HTTP/1.1 là không hỗ trợ multiplexing (ghép kênh), tức là trên một kết nối TCP chỉ xử lý được một request tại một thời điểm. Khi nhiều request đồng thời, trình duyệt phải mở nhiều kết nối song song (thường 6-8 kết nối cho mỗi domain), gây lãng phí tài nguyên và vẫn bị ảnh hưởng bởi head-of-line blocking
HTTP/2 ra đời nhằm giải quyết các hạn chế của HTTP/1.1, đặc biệt là về hiệu suất và tận dụng kết nối mạng tốt hơn
| Tính năng | HTTP/1.1 | HTTP/2 |
| Định dạng dữ liệu | Văn bản (Text-based) | Nhị phân (Binary) |
| Xử lý kết nối | Nhiều kết nối TCP song song | Một kết nối TCP duy nhất (Multiplexing) |
| Ghép kênh (Multiplex) | Không hỗ trợ | Hỗ trợ nhiều request/response trên 1 kết nối |
| Head-of-line blocking | Có ở tầng HTTP | Loại bỏ ở tầng HTTP |
| Nén header | Không hiệu quả | HPACK – nén header hiệu quả |
| Server Push | Không hỗ trợ | Hỗ trợ, server chủ động gửi tài nguyên |
| Bảo mật | HTTP hoặc HTTPS | Chủ yếu yêu cầu HTTPS |
- Giao thức nhị phân: HTTP/2 truyền dữ liệu dưới dạng nhị phân thay vì văn bản, giúp máy tính xử lý nhanh và chính xác hơn, giảm lỗi do định dạng.
- Multiplexing: Cho phép nhiều request và response được gửi đồng thời trên một kết nối TCP duy nhất, loại bỏ hoàn toàn head-of-line blocking ở tầng HTTP, tăng tốc độ tải trang và giảm độ trễ.
💡
HTTP/2, các request được chia thành các frame nhỏ và các frame này có thể được gửi đan xen nhau, giúp các response trả về độc lập, không bị ảnh hưởng bởi tốc độ xử lý của các request khác
- Nén header: HTTP/2 sử dụng cơ chế HPACK để nén các header lặp lại, giảm lượng dữ liệu truyền tải, đặc biệt hiệu quả với các website nhiều tài nguyên.
💡
HPACK là thuật toán nén header được sử dụng trong HTTP/2 nhằm giảm kích thước dữ liệu phần header của các request và response, giúp tiết kiệm băng thông và tăng hiệu suất truyền tải dữ liệu giữa client và server
Cách hoạt động của HPACK gồm hai cơ chế chính:
- Bảng tra cứu động (dynamic table): Cả client và server đều duy trì một bảng động lưu trữ các trường header đã được gửi trước đó. Khi gửi request/response mới, chỉ cần tham chiếu đến các giá trị đã tồn tại trong bảng thay vì gửi lại toàn bộ dữ liệu, hoặc chỉ gửi phần thay đổi mới.
- Mã hóa Huffman: Các giá trị header cũng được nén bằng thuật toán Huffman để giảm kích thước tối đa.
Nhờ vậy, HPACK giúp loại bỏ sự dư thừa và lặp lại trong các header, giảm đáng kể lượng dữ liệu truyền qua mạng, đặc biệt hữu ích khi có nhiều request nhỏ hoặc các trường header lớn như cookie, user-agent, v.v
- Server Push: Server có thể chủ động gửi các tài nguyên mà client có thể cần trước khi client yêu cầu, giúp tối ưu hóa tốc độ tải trang.
- Yêu cầu bảo mật: Dù HTTP/2 lý thuyết có thể hoạt động trên HTTP, hầu hết các trình duyệt hiện đại chỉ hỗ trợ HTTP/2 qua HTTPS để đảm bảo an toàn
Lợi ích của HTTP/2 so với HTTP/1.1
- Tăng tốc độ tải trang, giảm độ trễ nhờ multiplexing và nén header.
- Giảm số lượng kết nối TCP cần thiết, tiết kiệm tài nguyên máy chủ và client.
- Cải thiện trải nghiệm người dùng, đặc biệt với các trang web nhiều tài nguyên như hình ảnh, script, stylesheet....
- Hỗ trợ tốt hơn cho các ứng dụng web hiện đại, đáp ứng nhu cầu tải dữ liệu lớn và đồng thời.
HTTP/3 là phiên bản mới nhất của giao thức truyền siêu văn bản (HTTP), được thiết kế để cải thiện hiệu năng và bảo mật so với các phiên bản trước đó như HTTP/1.1 và HTTP/2. Điểm khác biệt lớn nhất của HTTP/3 là thay vì sử dụng giao thức truyền tải TCP, nó sử dụng giao thức QUIC (Quick UDP Internet Connections) được phát triển bởi Google và sau này chuẩn hóa bởi IETF
Đặc điểm nổi bật của HTTP/3
- Sử dụng QUIC thay cho TCP: QUIC hoạt động trên nền tảng UDP, giúp loại bỏ các vấn đề về head-of-line blocking ở tầng truyền tải mà HTTP/2 (dùng TCP) vẫn còn gặp phải. Khi một gói tin bị mất, chỉ luồng dữ liệu đó bị ảnh hưởng, các luồng khác vẫn hoạt động bình thường, giúp tăng tốc độ truyền tải và giảm độ trễ.
- Tích hợp bảo mật: HTTP/3 yêu cầu mã hóa TLS 1.3 ngay từ đầu, giúp tăng cường bảo mật cho dữ liệu truyền qua mạng mà không cần phải thiết lập HTTPS riêng biệt
- Multiplexing hiệu quả hơn: Cho phép truyền nhiều luồng dữ liệu đồng thời trên một kết nối mà không bị chặn lẫn nhau khi mất gói tin, giúp tối ưu tốc độ tải trang và trải nghiệm người dùng.
- Nén header bằng QPACK: HTTP/3 sử dụng thuật toán nén header mới là QPACK (thay cho HPACK ở HTTP/2) để phù hợp với kiến trúc đa luồng của QUIC, giúp giảm kích thước dữ liệu truyền đi và tăng hiệu quả truyền tải.
- Khởi tạo kết nối nhanh hơn: QUIC kết hợp quy trình bắt tay (handshake) của TCP và TLS, giúp thiết lập kết nối nhanh chỉ trong một bước, thay vì hai bước như trước đây, giảm thời gian chờ khi truy cập website
HTTP/3 là bước tiến lớn của giao thức HTTP, giúp tăng tốc độ, giảm độ trễ, cải thiện bảo mật và tối ưu hóa trải nghiệm truy cập web nhờ việc loại bỏ TCP, sử dụng QUIC trên nền tảng UDP, cùng các cải tiến về nén dữ liệu và thiết lập kết nối