Published on

HTTP/3 là gì? Có nên đón đầu xu thế mới?

Authors

Nếu bạn cảm thấy xa lạ với HTTP/3 thì bạn cũng không quá lạc hậu đâu. Chỉ mới đây thôi, vào tháng 11/2018, cái tên HTTP/3 🔗 chính thức được sử dụng thay cho cái tên HTTP-over-QUIC (hay còn gọi là QUIC, gQUIC). Chuẩn này dù đã được sử dụng lâu nhưng vẫn mới đến nỗi hiện tại chỉ có một số webserver hỗ trợ như Litespeed 🔗 (được sử dụng rất nhiều trong các gói hosting hiện nay), Caddy 🔗, Cloudflare 🔗 (hiện chỉ thử nghiệm trên nhóm nhỏ người dùng)... còn Apache, Nginx vẫn đang ngoài vùng phủ sóng.

Cập nhật 09/2019:

* Cloudflare chính thức hỗ trợ HTTP/3 🔗

* Nginx đang lên kế hoạch hỗ trợ HTTP/3 🔗 từ phiên bản mainline Nginx 1.17. Hiện tại mình vẫn chưa tìm thấy thông tin Apache chuẩn bị cho HTTP/3.

true

Ở thời điểm viết bài, chỉ 1% trong tổng số website trên toàn cầu 🔗 sử dụng QUIC.

HTTP/3 là gì?

QUIC (viết tắt là Quick UDP Internet Connections) tiền thân được thiết kế, phát triển bởi Google từ năm 2012 nên hay còn được gọi là gQUIC. Bởi vì vậy, sẽ không quá bất ngờ khi các website Google.com, Youtube.com hay Blogspot.com là những trang nổi tiếng nhất đang sử dụng QUIC.

true

Có thể dễ dàng kiểm tra website có sử dụng QUIC hay không thông qua công cụ Developer Tools của Google. Bạn có thể thấy cột Protocol có hiển thị http/2+quic/43. Con số 43 ở đây là phiên bản hiện tại của QUIC.

Qua nhiều giai đoạn phát triển, người ta đã đệ trình việc dùng cái tên HTTP/3 thay cho HTTP-over-QUIC. Vì vậy, trong bài viết này QUIC sẽ tương đương với HTTP/3.

Khác biệt giữa HTTP/3 với phần còn lại

Chúng ta hãy cùng xem qua những ưu nhược điểm (nếu có) của HTTP/3 để có thể quyết định là có sử dụng hay không. Dù Google đã triển khai chuẩn này trên các website của hãng từ năm 2014, nhưng tỉ lệ website sử dụng HTTP/3 lại rất thấp, tại sao vậy?

Trước tiên, hãy nhìn lại các chuẩn HTTP/1.1 và HTTP/2 đang được sử dụng rộng rãi hiện nay. Hiện tại, các chuẩn này đang sử dụng giao thức TCP, trong khi HTTP/3 lại sử dụng UDP.

TCP hoạt động như sau: khi bạn truy cập một website nào đó, đầu tiên trình duyệt sẽ gửi một gói tin (packet) đến máy chủ và chờ máy chủ phản hồi. Khi trình duyệt đã nhận được gói tin đó sẽ lại gửi một gói tin khác thông báo rằng tôi (trình duyệt) đã nhận được rồi. Các gói tin được gửi và nhận đều được đánh số thứ tự để khi bên nhận nhận được, họ sẽ có thể ghép nối theo đúng trình tự, điều này cho phép TCP được sử dụng như một giao thức có độ tin cậy cao.

UDP cũng tương tự như TCP, tuy nhiên, giao thức này không yêu cầu bên nhận "xác nhận" là đã nhận được gói tin, cũng như không đánh số thứ tự cho các gói tin này. Chính vì vậy, chúng ta không thể chắc chắn rằng bên nhận có thể nhận được gói tin, cũng như có đọc gói tin này theo một thứ tự chính xác hay không.

Nhờ vậy, UDP giảm thiểu được lượng thông tin trao đổi giữa máy chủ và người dùng, giúp máy chủ giảm tải đi một lượng công việc nhất định. Nói rộng ra hơn, quá trình tải trang được giảm đi một cách khá rõ rệt.

HTTP/3 có vẻ không đáng tin cậy, tôi có nên sử dụng hay không?

Về độ ổn định, các kĩ sư ở Google và cộng đồng đã và đang cố gắng để khắc phục các nhược điểm của UDP nhờ cơ chế điều khiển tắc nghẽn (congestion control) truyền thống như TCP, giúp đánh số thứ tự cho gói tin, đảm bảo dữ liệu có thể truyền đi mà không mất mát, hư hỏng. Việc khôi phục gói tin bị mất còn nhanh hơn TCP.

QUIC’s key features include establishing connections faster, stream-based multiplexing, improved loss recovery, and no head-of-line blocking. QUIC is designed with mobility in mind, and supports migrating connections from WiFi to Cellular and back.

Google Cloud Platform 🔗

Cũng nhờ cơ chế này, mọi vấn đề về kết nối mạng không ổn định sẽ không ảnh hưởng đến toàn bộ request của website, còn được biết tới với tên gọi HoL (Head-of-Line) blocking.

Về tốc độ, HTTP/3 có thể dễ dàng đánh bại giao thức HTTPS + TLS nhờ công nghệ 0-RTT (TLS 1.3 cũng đã có 0-RTT 🔗 rồi). Hãy nhìn cách mà HTTP/3 thực hiện handshake (bắt tay) với máy chủ để đảm bảo kết nối này được bảo mật.

true

HTTPS over TCP + TLS: tốn 200ms nếu lặp lại kết nối, 300ms nếu chưa từng kết nối với nhau.
HTTPS over QUIC (HTTP/3): chỉ tốn 0ms nếu lặp lại kết nối, 100ms nếu chưa từng kết nối với nhau.

Vài trăm mili giây có thể là nhỏ, nhưng hãy nhớ rằng, thiết bị di động đang lên ngôi, nhưng không phải mạng di động nào cũng ổn định. Sự khác biệt vài trăm mili giây ở cáp quang có thể là vài giây ở kết nối di động đó ;)

Kết

Tất cả vẫn còn là quá sớm khi nói về HTTP/3 bởi vì hiện nay, chuẩn này vẫn đang ở trạng thái nháp, Firefox, Edge và Safari vẫn chưa hỗ trợ chính thức (nhưng sẽ có fallback mode hỗ trợ TCP cho các trình duyệt không hỗ trợ HTTP/3). Ngay cả các webserver nổi tiếng vẫn còn đang thảo luận và chưa có động thái gì gấp rút chuẩn bị hỗ trợ.

Dù khuyết điểm và mức độ phổ biến vẫn còn thấp, bạn hoàn toàn có thể sử dụng HTTP/3 ngay bây giờ. Hiện tại, nếu bạn muốn sử dụng HTTP/3 một cách đơn giản nhất, hãy:

  • Mua một gói hosting sử dụng Litespeed, bạn sẽ được hỗ trợ tận răng, không cần phải cài đặt gì.
  • Sử dụng webserver Caddy: mình từng sử dụng qua và thấy Caddy không đem lại performance tốt, không đáng để đánh đổi
  • Sử dụng Cloudflare, cũng hỗ trợ tận răng như Litespeed, nhưng hiện tại chỉ hỗ trợ cho một nhóm nhỏ người dùng.

Mình nghĩ QUIC được "chống lưng" bởi Google nên sẽ không chết yểu và sẽ còn phát triển mạnh hơn nữa. Tuy nhiên, để làm nên thay đổi rõ rệt như việc nâng cấp lên HTTPS thì có lẽ là không.

Google hiện tại chưa có lí do gì ngoài tốc độ để đốc thúc các quản trị viên sử dụng giao thức này. Ngay cả webp, webm và brotli vẫn hãy còn rất ít người sử dụng...

Với các hệ thống lớn, nhiều người sử dụng, hãy khoan quan tâm tới HTTP/3 mà hãy cân nhắc nâng cấp lên HTTP/2 nếu bạn vẫn chưa sử dụng. Cơ chế multiplexing của HTTP/2 rất giống với HTTP/3, giúp bạn cảm nhận phần nào tốc độ tuyệt vời của HTTP/3.

Với các hệ thống nhỏ, blog cá nhân, đừng ngại ngần gì mà không nâng cấp lên HTTP/2 hoặc kể cả HTTP/3 để có tốc độ nhanh hơn, bảo mật hơn (do HTTP/2 yêu cầu kết nối phải được mã hóa). Đây là một deal win-win dành cho bạn, bạn không có gì phải mất mà còn được nhận nhiều hơn thế.