LÊ NGUYÊN DŨNG | Thuộc lứa 8x cuối
cùng, hiện là kỹ sư backend cho một ứng
dụng OTT quen thuộc với người dùng
Việt Nam, đang ẩn cư tại Sài Gòn.
N ăm 1989, Tim Berners-Lee phát minh ra HTTP. Năm 1996, HTTP/1.0 được tổ chức RFC thông qua trở thành một chuẩn
(standard), HTTP/1.1 cũng hình thành cùng năm đó, đây là một trong những cột mốc quan trọng bậc nhất khiến thế giới
công nghệ phát triển như vũ bão và định hình như ngày hôm nay. Sau 26 năm kể từ ngày phát minh và gần 20 năm kể từ
ngày phiên bản 1.0 xuất hiện, tháng 5 năm 2015, tổ chức RFC đã thông qua đặc tả HTTP/2, đánh dấu thay đổi lớn nhất kể
từ ngày hình thành tới nay của giao thức HTTP.
Nội dung của bài viết này sẽ không đi sâu vào chi tiết đặc tả của HTTP/2, thay vào đó người viết sẽ cố gắng nhìn nhận vấn
đề cốt lõi của việc nâng cấp này thông qua tập trung phân tích hai cơ chế: kết nối và truyền dữ liệu.
HTTP/1
Đầu tiên, chúng ta quan sát lại cách làm của HTTP/1:
1. KẾT NỐI CÓ VÒNG ĐỜI NGẮN
thông dụng nhất.
Tuy nhiên cách làm này rất không tối ưu vì thời gian
thiết lập kết nối mới tốn rất nhiều thời gian do phải thực
hiện quá trình bắt tay 3 bước (three-hand-shaking), chưa
kể nếu có các lớp xử lý bảo mật như TLS sẽ càng làm tăng
độ trễ của việc thiết lập kết nối này.
2. KẾT NỐI CÓ VÒNG ĐỜI DÀI HẠN (KEEP-ALIVE CONNECTION)
Hình: HTTP/1 connection có vòng đời ngắn
Trong dạng xử lý này, mỗi kết nối (connection) sẽ yêu
cầu một tài nguyên độc lập. Kết nối sẽ được tạo mới khi
cần yêu cầu một tài nguyên và đóng lại sau khi nhận được
dữ liệu trả về. Đây là dạng làm việc đơn giản và cũng là
18
DIJSKTRA
Hình: Connection keep-alive