logo

Lộ trình

Khóa học

Tài liệu

Mock Interview

Liên hệ

Quay lại
  • Trang chủ

    /

  • Tài liệu

    /

  • HTTP/1.1 vs HTTP/2 : Tại sao HTTP/2 lại nhanh hơn?
Tài liệu

HTTP/1.1 vs HTTP/2 : Tại sao HTTP/2 lại nhanh hơn?

Ronin Engineer

15 Tháng 7 2025

<p>By @VietDuc</p><p><strong>HTTP (Hypertext Transfer Protocol) </strong>là giao thức truyền tải tài nguyên cho Web theo mô hình <strong>Client-Server</strong> (hoặc <strong>Request-Response</strong>).</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://lh7-rt.googleusercontent.com/docsz/AD_4nXdoq4g_BKfz9Bzu5Ud1OfN_KQyFJFXobufP46Ql8nnDrqFXp1ghLBTlScxwYLuv_fNyDxrmhmy1SW-ciK2CRjt_iCkyJE6j42guFwR2KMzPiol5XvNQetE7u-5DDHkG9U2hHMaU?key=9EIYfgIKuppMk_W5APQaaw" class="kg-image" alt="" loading="lazy" width="600" height="195"><figcaption><span style="white-space: pre-wrap;">Minh họa mô hình Client-Server</span></figcaption></figure><p></p><p>Ví dụ khi bạn truy cập <a href="https://roninhub.com/">https://roninhub.com/</a> . Trình duyệt sẽ tạo các HTTP request đến Server lấy các file HTML, Ảnh, Text… hiển thị lên như ảnh bên dưới.</p><figure class="kg-card kg-image-card"><img src="https://roninhub.com/content/images/2025/07/2.png" class="kg-image" alt="" loading="lazy" width="1904" height="950" srcset="https://roninhub.com/content/images/size/w600/2025/07/2.png 600w, https://roninhub.com/content/images/size/w1000/2025/07/2.png 1000w, https://roninhub.com/content/images/size/w1600/2025/07/2.png 1600w, https://roninhub.com/content/images/2025/07/2.png 1904w" sizes="(min-width: 720px) 720px"></figure><p></p><h2 id="http-ho%E1%BA%A1t-%C4%91%E1%BB%99ng-th%E1%BA%BF-n%C3%A0o"><strong>HTTP hoạt động thế nào?</strong></h2><p>Khi một Client (thường là trình duyệt) gửi một HTTP request, quá trình giao tiếp giữa Client và Server thường diễn ra qua các bước sau:</p><ul><li><strong>Thiết lập kết nối TCP: </strong>Client tạo một kết nối TCP đến Server.</li><li><strong>Gửi HTTP request</strong>: Client gửi request đến Server bằng HTTP protocol. Mỗi HTTP method có một mục đích cụ thể. Ví dụ GET để lấy resource, POST để tạo mới resource…</li><li><strong>Server xử lý request và gửi response</strong>: Server nhận và xử lý yêu cầu, sau đó trả về một HTTP response (bao gồm mã trạng thái, headers, và nội dung) thông qua kết nối TCP đã được thiết lập.</li><li><strong>Client nhận response</strong>: Client nhận response từ Server. Sau đó đóng kết nối TCP hoặc tiếp tục sử dụng kết nối TCP đó nếu vẫn còn request cần gửi.</li></ul><p></p><h2 id="http11"><strong>HTTP/1.1</strong></h2><p>HTTP/1.1 (version 1.1) phát hành vào năm 1999. ĐIểm nổi bật ở phiên bản này là hỗ trợ nhiều method hơn (GET, POST, PUT, DELETE, HEAD, OPTIONS và TRACE), có header. Hỗ trợ <strong>TCP Connection persistent connection(HTTP keep-alive)</strong> và <strong>HTTP Pipelining</strong>.</p><h3 id="http-persistent-connection-http-keep-alive"><strong>HTTP persistent connection (HTTP keep-alive)</strong></h3><p>Thay vì tạo mới TCP connection cho mỗi request và đóng sau khi nhận được response. Client sẽ tái sử dụng một TCP connection có sẵn cho nhiều HTTP request/response.</p><figure class="kg-card kg-image-card"><img src="https://roninhub.com/content/images/2025/07/3.png" class="kg-image" alt="" loading="lazy" width="450" height="280"></figure><h3 id="http-pipelining"><strong>HTTP Pipelining</strong></h3><p>Trong HTTP/1.1, <strong>HTTP Pipelining</strong> cho phép Client gửi nhiều request liên tiếp mà không cần chờ response của request trước đó. Các request này sẽ được Server xử lý tuần tự, và response cũng sẽ được trả về theo đúng thứ tự request đã được gửi.</p><p>Tuy nhiên, nếu một request trong chuỗi gặp sự cố (ví dụ: mất gói tin, kết nối chậm), tất cả các request sau nó sẽ bị chặn (block) cho đến khi request bị lỗi được xử lý xong. Vấn đề này được gọi là <strong>Head-of-Line (HOL) blocking</strong>, là một hạn chế lớn của <strong>HTTP pipelining dựa trên TCP</strong>.</p><p>Để giải quyết các vấn đề của HTTP/1. <strong>SPDY </strong>(phát âm là "speedy") được tạo ra, SPDY ảnh hưởng đến việc thiết kế HTTP/2 sau này. Hãy tiếp tục để xem SPDY là gì và cách SPDY giải quyết các vấn đề của HTTP/1 như thế nào.</p><p></p><h2 id="spdy-l%C3%A0-g%C3%AC"><strong>SPDY là gì?</strong></h2><p>SPDY (phát âm là "speedy") là một giao thức mạng do Google phát triển để tăng tốc độ tải trang web. Nó là tiền thân của HTTP/2 và đã ảnh hưởng trực tiếp đến việc thiết kế HTTP/2.</p><p>SPDY giải quyết các vấn đề của HTTP/1</p><ul><li><strong>Head-of-line blocking</strong>: Trong HTTP/1.1, nếu một request bị chậm hoặc lỗi, các request sau nó sẽ bị chặn. SPDY khắc phục bằng cách hỗ trợ multiplexing: nhiều request có thể được gửi song song qua cùng một TCP connection, mỗi request/response được gắn với một streamID. Vì vậy, một request bị lỗi sẽ không ảnh hưởng đến các request khác. Ở phần HTTP/2 sẽ giải thích rõ hơn về cách xử lý vấn đề này.</li><li><strong>Overhead HTTP headers: </strong>HTTP/1.1 gửi lại toàn bộ headers cho mỗi request, gây ra độ trễ không cần thiết. SPDY sử dụng nén header để giảm kích thước dữ liệu truyền tải, giúp cải thiện hiệu suất mạng.</li><li><strong>Server Push</strong>: Trong HTTP/1.1, Server chỉ phản hồi khi nhận được request từ client. SPDY bổ sung <strong>server push</strong>, cho phép Server <strong>chủ động gửi</strong> các tài nguyên mà nó đoán là Client sẽ cần, ví dụ như CSS, JavaScript, hình ảnh.</li></ul><p>Google đã ngừng hỗ trợ SPDY vào năm 2016. Tuy nhiên, hầu hết các tính năng quan trọng của SPDY đã được chuẩn hóa và tích hợp vào HTTP/2, giúp HTTP/2 trở thành một bước tiến lớn so với HTTP/1.1.</p><p></p><h2 id="http2"><strong>HTTP/2</strong></h2><p>HTTP/2 được phát triển dựa trên SPDY là phiên bản nâng cấp của HTTP/1 được thiết kế để cải thiện tốc độ và hiệu quả truyền dữ liệu trên web. Ra mắt vào năm 2015.</p><p>HTTP/2 sử dụng các kỹ thuật như ghép kênh (multiplexing), nén header, và đẩy dữ liệu từ Server (server push) để tối ưu hóa việc truyền tải dữ liệu.</p><p>Sau đây là các cải tiến chính của HTTP/2 so với HTTP/1.1</p><h3 id="multiplexing"><strong>Multiplexing</strong></h3><p><strong>Multiplexing</strong> là tính năng quan trọng trong HTTP/2 giúp <strong>giải quyết vấn đề Head-of-Line (HOL) blocking ở tầng HTTP</strong> tồn tại trong HTTP/1.1.</p><p>Trong HTTP/1.1, dù sử dụng HTTP pipelining, các response vẫn phải được <strong>trả về theo thứ tự gửi request</strong>, dẫn đến tình trạng <strong>tắc nghẽn nếu một request gặp lỗi hoặc bị chậm</strong>.</p><p>HTTP/2 khắc phục vấn đề này bằng cách sử dụng các <strong>stream, </strong>&nbsp;mỗi stream tương ứng với <strong>một cặp request/response</strong> độc lập.</p><p>Mỗi stream sẽ được chia thành các <strong>frame. </strong>Mỗi frame chứa các thông tin về loại stream ID, loại frame và độ dài byte của frame đó. Các frame thuộc các stream khác nhau có thể được trộn lẫn và gửi đồng thời qua cùng một kết nối TCP.</p><p>Hình dưới minh họa về tình năng <strong>multiplexing</strong> ở HTTP/2</p><p>Có thể thấy 3 hình chữ nhật có màu thể hiện cho các gói TCP (TCP packet). Bên trong gói TCP chứa HTTP/2 frame (✉) . Gói TCP đầu tiên (màu cam) và gói TCP thứ 3 (màu xanh) chứa các frame của stream khác nhau</p><figure class="kg-card kg-image-card"><img src="https://roninhub.com/content/images/2025/07/4.png" class="kg-image" alt="" loading="lazy" width="406" height="498"></figure><p></p><p>Tuy nhiên, HTTP/2 chỉ giải quyết được <strong>HOL Blocking ở tầng HTTP</strong>. <strong>Nhưng vấn đề HOL Blocking vẫn còn ở tầng Transport</strong> do TCP bắt buộc đảm bảo thứ tự gói tin: nếu một gói bị mất, các gói sau phải chờ. Chỉ đến HTTP/3, khi TCP được thay bằng <strong>QUIC</strong>, vấn đề này mới được xử lý triệt để. Hẹn gặp lại các bạn trong bài viết về HTTP/3 mình sẽ giải thích về vấn đề này.</p><h3 id="http2-truy%E1%BB%81n-t%E1%BA%A3i-d%E1%BB%AF-li%E1%BB%87u-d%E1%BA%A1ng-nh%E1%BB%8B-ph%C3%A2n-binary-protocol"><strong>HTTP/2 truyền tải dữ liệu dạng nhị phân (Binary Protocol)</strong></h3><p>Khác với các phiên bản HTTP/1.x truyền dữ liệu dưới dạng văn bản (text), HTTP/2 sử dụng định dạng nhị phân để truyền tải.</p><p>Giao thức nhị phân này cho phép multiplexing bằng cách chia nhỏ các thông điệp HTTP thành các frame được định nghĩa rõ ràng và gửi song song qua một kết nối duy nhất.</p><p>Ngoài ra, định dạng nhị phân còn giúp <strong>đơn giản hóa việc phân tích cú pháp</strong>, <strong>giảm lỗi cú pháp</strong>, và <strong>nén dữ liệu hiệu quả hơn</strong>, từ đó cải thiện hiệu suất giao tiếp giữa máy khách và máy chủ một cách đáng kể.</p><figure class="kg-card kg-image-card"><img src="https://roninhub.com/content/images/2025/07/5.png" class="kg-image" alt="" loading="lazy" width="708" height="406" srcset="https://roninhub.com/content/images/size/w600/2025/07/5.png 600w, https://roninhub.com/content/images/2025/07/5.png 708w"></figure><h3 id="prioritization"><strong>Prioritization</strong></h3><p>Trong HTTP/2, <strong>Client có thể chỉ định mức độ ưu tiên (priority)</strong> cho từng request, giúp Server biết <strong>nên xử lý và phản hồi request nào trước</strong> dựa trên tầm quan trọng.</p><p>Tính năng này đặc biệt hữu ích khi tải một trang web phức tạp, nơi có nhiều tài nguyên được yêu cầu đồng thời.</p><p>Ví dụ về <strong>thứ tự ưu tiên từ cao đến thấp</strong> khi tải một trang web:</p><ol><li><strong>HTML</strong> – cấu trúc chính của trang, nên tải đầu tiên.</li><li><strong>CSS / JavaScript</strong> – ảnh hưởng đến hiển thị và chức năng, cần được tải sớm.</li><li><strong>Font</strong> – cần cho việc hiển thị văn bản đúng định dạng.</li><li><strong>Image</strong> – thường không ảnh hưởng đến cấu trúc hoặc logic chính, có thể tải sau.</li></ol><p>Nhờ tính năng <strong>prioritization</strong>, HTTP/2 giúp tăng tốc quá trình hiển thị nội dung quan trọng, cải thiện trải nghiệm người dùng, đặc biệt trong điều kiện mạng chậm.</p><h3 id="header-compression"><strong>Header Compression</strong></h3><p>Các thông tin được truyền tải trên Web chứa nhiều header lặp đi lặp lại. HTTP/2 sử dụng <strong>HPACK </strong>compress (nén) các header này giúp giảm tải băng thông.</p><figure class="kg-card kg-image-card"><img src="https://roninhub.com/content/images/2025/07/6.png" class="kg-image" alt="" loading="lazy" width="942" height="375" srcset="https://roninhub.com/content/images/size/w600/2025/07/6.png 600w, https://roninhub.com/content/images/2025/07/6.png 942w" sizes="(min-width: 720px) 720px"></figure><h3 id="server-push"><strong>Server Push</strong></h3><p>Trong HTTP/2, <strong>Server Push</strong> là cơ chế cho phép <strong>Server chủ động gửi thêm các tài nguyên</strong> mà nó <strong>dự đoán Client sẽ cần</strong>, <strong>mà không cần chờ Client gửi request</strong> cho các tài nguyên đó.</p><p>Khi Client gửi một request (ví dụ: tải một trang HTML), Server có thể <strong>đồng thời "push" các tài nguyên liên quan</strong> như CSS, JavaScript, hoặc hình ảnh đi kèm. Điều này giúp <strong>giảm số lượng round-trip</strong> giữa Client và Server, từ đó <strong>tăng tốc độ tải trang</strong>.</p><figure class="kg-card kg-image-card"><img src="https://roninhub.com/content/images/2025/07/7.png" class="kg-image" alt="" loading="lazy" width="522" height="285"></figure><p></p><h2 id="%E1%BB%A9ng-d%E1%BB%A5ng"><strong>Ứng dụng</strong></h2><p><strong>HTTP/1.1</strong> tuy không còn phổ biến như trước, nhưng vẫn được sử dụng trên một số hệ thống cũ hoặc các môi trường bị giới hạn tài nguyên (như thiết bị nhúng, hệ thống legacy, hoặc khi không hỗ trợ giao thức mới).</p><p>Ngoài ra, hiện tại các ngôn ngữ và framework phổ biến như Spring (Java), Django (Python), NodeJS… <strong>mặc định sử dụng HTTP/1.1</strong>. Các bạn cần lưu ý điều này để có thể cấu hình phù hợp với yêu cầu và mục đích của dự án.</p><p><strong>HTTP/2</strong> hiện nay đã trở thành tiêu chuẩn phổ biến và được hỗ trợ bởi hầu hết các trình duyệt hiện đại cũng như máy chủ web như Nginx, Apache, IIS…</p><p>Nhiều hệ thống đã và đang chuyển đổi dần từ HTTP/1.x sang HTTP/2 để tận dụng các ưu điểm của HTTP/2</p><p>Đặc biệt, Google đã phát triển giao thức <strong>gRPC dựa trên HTTP/2</strong>, tận dụng khả năng truyền song song hiệu quả và tốc độ cao của HTTP/2 để phục vụ cho việc giao tiếp giữa các microservices trong các hệ thống phân tán quy mô lớn.</p><p>Mặc dù HTTP/2 cải tiến rất nhiều, nhưng vẫn còn một số hạn chế (như <strong>HOL Blocking ở tầng Transport</strong>), điều này đã thúc đẩy sự ra đời của <strong>HTTP/3</strong> dựa trên <strong>QUIC (Quick UDP Internet Connections)</strong> đang ngày càng được triển khai rộng rãi trong các dịch vụ lớn như Google, Facebook, Cloudflare…</p><p></p><h2 id="k%E1%BA%BFt-lu%E1%BA%ADn"><strong>Kết Luận</strong></h2><p><strong>HTTP/2</strong> là phiên bản cải tiến mạnh mẽ của HTTP/1.1, được thiết kế để <strong>tăng tốc độ truyền tải dữ liệu</strong>, <strong>giảm độ trễ</strong> và <strong>tối ưu hóa hiệu suất mạng</strong>. Các tính năng nổi bật như <strong>multiplexing</strong>, <strong>nén header</strong>, <strong>prioritization</strong>, và <strong>server push</strong> đã khắc phục nhiều hạn chế của HTTP/1.1 như <strong>head-of-line blocking</strong>, overhead lớn, và thiếu khả năng kiểm soát ưu tiên.</p><p>HTTP/2 vẫn <strong>duy trì mô hình request/response quen thuộc của HTTP</strong>, nhưng thay đổi cách thức truyền tải, cách kết nối và định dạng truyền đã mang lại hiệu quả vượt trội mà không phá vỡ tính tương thích với các ứng dụng web hiện tại.</p><p>Qua bài viết này hy vọng mọi người có thêm kiến thức về HTTP. Ngoài ra mọi người có thể tham khảo video bên dưới, so sánh tốc độ khi tải ảnh giữa HTTP/1.1 và HTTP/2.</p><figure class="kg-card kg-embed-card"><iframe width="200" height="113" src="https://www.youtube.com/embed/pmCGa9SxBeY?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen="" title="http v http2 comparison"></iframe></figure><p></p><p>Tham khảo thêm:</p><p><a href="https://alexandrehtrb.github.io/posts/2024/03/http2-and-http3-explained/?ref=roninhub.com">https://alexandrehtrb.github.io/posts/2024/03/http2-and-http3-explained/</a></p><p><a href="https://engineering.salesforce.com/the-full-picture-on-http-2-and-hol-blocking-7f964b34d205/?ref=roninhub.com">https://engineering.salesforce.com/the-full-picture-on-http-2-and-hol-blocking-7f964b34d205/</a></p>

By @VietDuc

HTTP (Hypertext Transfer Protocol) là giao thức truyền tải tài nguyên cho Web theo mô hình Client-Server (hoặc Request-Response).

Minh họa mô hình Client-Server

Ví dụ khi bạn truy cập https://roninhub.com/ . Trình duyệt sẽ tạo các HTTP request đến Server lấy các file HTML, Ảnh, Text… hiển thị lên như ảnh bên dưới.

HTTP hoạt động thế nào?

Khi một Client (thường là trình duyệt) gửi một HTTP request, quá trình giao tiếp giữa Client và Server thường diễn ra qua các bước sau:

  • Thiết lập kết nối TCP: Client tạo một kết nối TCP đến Server.
  • Gửi HTTP request: Client gửi request đến Server bằng HTTP protocol. Mỗi HTTP method có một mục đích cụ thể. Ví dụ GET để lấy resource, POST để tạo mới resource…
  • Server xử lý request và gửi response: Server nhận và xử lý yêu cầu, sau đó trả về một HTTP response (bao gồm mã trạng thái, headers, và nội dung) thông qua kết nối TCP đã được thiết lập.
  • Client nhận response: Client nhận response từ Server. Sau đó đóng kết nối TCP hoặc tiếp tục sử dụng kết nối TCP đó nếu vẫn còn request cần gửi.

HTTP/1.1

HTTP/1.1 (version 1.1) phát hành vào năm 1999. ĐIểm nổi bật ở phiên bản này là hỗ trợ nhiều method hơn (GET, POST, PUT, DELETE, HEAD, OPTIONS và TRACE), có header. Hỗ trợ TCP Connection persistent connection(HTTP keep-alive) và HTTP Pipelining.

HTTP persistent connection (HTTP keep-alive)

Thay vì tạo mới TCP connection cho mỗi request và đóng sau khi nhận được response. Client sẽ tái sử dụng một TCP connection có sẵn cho nhiều HTTP request/response.

HTTP Pipelining

Trong HTTP/1.1, HTTP Pipelining cho phép Client gửi nhiều request liên tiếp mà không cần chờ response của request trước đó. Các request này sẽ được Server xử lý tuần tự, và response cũng sẽ được trả về theo đúng thứ tự request đã được gửi.

Tuy nhiên, nếu một request trong chuỗi gặp sự cố (ví dụ: mất gói tin, kết nối chậm), tất cả các request sau nó sẽ bị chặn (block) cho đến khi request bị lỗi được xử lý xong. Vấn đề này được gọi là Head-of-Line (HOL) blocking, là một hạn chế lớn của HTTP pipelining dựa trên TCP.

Để giải quyết các vấn đề của HTTP/1. SPDY (phát âm là "speedy") được tạo ra, SPDY ảnh hưởng đến việc thiết kế HTTP/2 sau này. Hãy tiếp tục để xem SPDY là gì và cách SPDY giải quyết các vấn đề của HTTP/1 như thế nào.

SPDY là gì?

SPDY (phát âm là "speedy") là một giao thức mạng do Google phát triển để tăng tốc độ tải trang web. Nó là tiền thân của HTTP/2 và đã ảnh hưởng trực tiếp đến việc thiết kế HTTP/2.

SPDY giải quyết các vấn đề của HTTP/1

  • Head-of-line blocking: Trong HTTP/1.1, nếu một request bị chậm hoặc lỗi, các request sau nó sẽ bị chặn. SPDY khắc phục bằng cách hỗ trợ multiplexing: nhiều request có thể được gửi song song qua cùng một TCP connection, mỗi request/response được gắn với một streamID. Vì vậy, một request bị lỗi sẽ không ảnh hưởng đến các request khác. Ở phần HTTP/2 sẽ giải thích rõ hơn về cách xử lý vấn đề này.
  • Overhead HTTP headers: HTTP/1.1 gửi lại toàn bộ headers cho mỗi request, gây ra độ trễ không cần thiết. SPDY sử dụng nén header để giảm kích thước dữ liệu truyền tải, giúp cải thiện hiệu suất mạng.
  • Server Push: Trong HTTP/1.1, Server chỉ phản hồi khi nhận được request từ client. SPDY bổ sung server push, cho phép Server chủ động gửi các tài nguyên mà nó đoán là Client sẽ cần, ví dụ như CSS, JavaScript, hình ảnh.

Google đã ngừng hỗ trợ SPDY vào năm 2016. Tuy nhiên, hầu hết các tính năng quan trọng của SPDY đã được chuẩn hóa và tích hợp vào HTTP/2, giúp HTTP/2 trở thành một bước tiến lớn so với HTTP/1.1.

HTTP/2

HTTP/2 được phát triển dựa trên SPDY là phiên bản nâng cấp của HTTP/1 được thiết kế để cải thiện tốc độ và hiệu quả truyền dữ liệu trên web. Ra mắt vào năm 2015.

HTTP/2 sử dụng các kỹ thuật như ghép kênh (multiplexing), nén header, và đẩy dữ liệu từ Server (server push) để tối ưu hóa việc truyền tải dữ liệu.

Sau đây là các cải tiến chính của HTTP/2 so với HTTP/1.1

Multiplexing

Multiplexing là tính năng quan trọng trong HTTP/2 giúp giải quyết vấn đề Head-of-Line (HOL) blocking ở tầng HTTP tồn tại trong HTTP/1.1.

Trong HTTP/1.1, dù sử dụng HTTP pipelining, các response vẫn phải được trả về theo thứ tự gửi request, dẫn đến tình trạng tắc nghẽn nếu một request gặp lỗi hoặc bị chậm.

HTTP/2 khắc phục vấn đề này bằng cách sử dụng các stream,  mỗi stream tương ứng với một cặp request/response độc lập.

Mỗi stream sẽ được chia thành các frame. Mỗi frame chứa các thông tin về loại stream ID, loại frame và độ dài byte của frame đó. Các frame thuộc các stream khác nhau có thể được trộn lẫn và gửi đồng thời qua cùng một kết nối TCP.

Hình dưới minh họa về tình năng multiplexing ở HTTP/2

Có thể thấy 3 hình chữ nhật có màu thể hiện cho các gói TCP (TCP packet). Bên trong gói TCP chứa HTTP/2 frame (✉) . Gói TCP đầu tiên (màu cam) và gói TCP thứ 3 (màu xanh) chứa các frame của stream khác nhau

Tuy nhiên, HTTP/2 chỉ giải quyết được HOL Blocking ở tầng HTTP. Nhưng vấn đề HOL Blocking vẫn còn ở tầng Transport do TCP bắt buộc đảm bảo thứ tự gói tin: nếu một gói bị mất, các gói sau phải chờ. Chỉ đến HTTP/3, khi TCP được thay bằng QUIC, vấn đề này mới được xử lý triệt để. Hẹn gặp lại các bạn trong bài viết về HTTP/3 mình sẽ giải thích về vấn đề này.

HTTP/2 truyền tải dữ liệu dạng nhị phân (Binary Protocol)

Khác với các phiên bản HTTP/1.x truyền dữ liệu dưới dạng văn bản (text), HTTP/2 sử dụng định dạng nhị phân để truyền tải.

Giao thức nhị phân này cho phép multiplexing bằng cách chia nhỏ các thông điệp HTTP thành các frame được định nghĩa rõ ràng và gửi song song qua một kết nối duy nhất.

Ngoài ra, định dạng nhị phân còn giúp đơn giản hóa việc phân tích cú pháp, giảm lỗi cú pháp, và nén dữ liệu hiệu quả hơn, từ đó cải thiện hiệu suất giao tiếp giữa máy khách và máy chủ một cách đáng kể.

Prioritization

Trong HTTP/2, Client có thể chỉ định mức độ ưu tiên (priority) cho từng request, giúp Server biết nên xử lý và phản hồi request nào trước dựa trên tầm quan trọng.

Tính năng này đặc biệt hữu ích khi tải một trang web phức tạp, nơi có nhiều tài nguyên được yêu cầu đồng thời.

Ví dụ về thứ tự ưu tiên từ cao đến thấp khi tải một trang web:

  1. HTML – cấu trúc chính của trang, nên tải đầu tiên.
  2. CSS / JavaScript – ảnh hưởng đến hiển thị và chức năng, cần được tải sớm.
  3. Font – cần cho việc hiển thị văn bản đúng định dạng.
  4. Image – thường không ảnh hưởng đến cấu trúc hoặc logic chính, có thể tải sau.

Nhờ tính năng prioritization, HTTP/2 giúp tăng tốc quá trình hiển thị nội dung quan trọng, cải thiện trải nghiệm người dùng, đặc biệt trong điều kiện mạng chậm.

Header Compression

Các thông tin được truyền tải trên Web chứa nhiều header lặp đi lặp lại. HTTP/2 sử dụng HPACK compress (nén) các header này giúp giảm tải băng thông.

Server Push

Trong HTTP/2, Server Push là cơ chế cho phép Server chủ động gửi thêm các tài nguyên mà nó dự đoán Client sẽ cần, mà không cần chờ Client gửi request cho các tài nguyên đó.

Khi Client gửi một request (ví dụ: tải một trang HTML), Server có thể đồng thời "push" các tài nguyên liên quan như CSS, JavaScript, hoặc hình ảnh đi kèm. Điều này giúp giảm số lượng round-trip giữa Client và Server, từ đó tăng tốc độ tải trang.

Ứng dụng

HTTP/1.1 tuy không còn phổ biến như trước, nhưng vẫn được sử dụng trên một số hệ thống cũ hoặc các môi trường bị giới hạn tài nguyên (như thiết bị nhúng, hệ thống legacy, hoặc khi không hỗ trợ giao thức mới).

Ngoài ra, hiện tại các ngôn ngữ và framework phổ biến như Spring (Java), Django (Python), NodeJS… mặc định sử dụng HTTP/1.1. Các bạn cần lưu ý điều này để có thể cấu hình phù hợp với yêu cầu và mục đích của dự án.

HTTP/2 hiện nay đã trở thành tiêu chuẩn phổ biến và được hỗ trợ bởi hầu hết các trình duyệt hiện đại cũng như máy chủ web như Nginx, Apache, IIS…

Nhiều hệ thống đã và đang chuyển đổi dần từ HTTP/1.x sang HTTP/2 để tận dụng các ưu điểm của HTTP/2

Đặc biệt, Google đã phát triển giao thức gRPC dựa trên HTTP/2, tận dụng khả năng truyền song song hiệu quả và tốc độ cao của HTTP/2 để phục vụ cho việc giao tiếp giữa các microservices trong các hệ thống phân tán quy mô lớn.

Mặc dù HTTP/2 cải tiến rất nhiều, nhưng vẫn còn một số hạn chế (như HOL Blocking ở tầng Transport), điều này đã thúc đẩy sự ra đời của HTTP/3 dựa trên QUIC (Quick UDP Internet Connections) đang ngày càng được triển khai rộng rãi trong các dịch vụ lớn như Google, Facebook, Cloudflare…

Kết Luận

HTTP/2 là phiên bản cải tiến mạnh mẽ của HTTP/1.1, được thiết kế để tăng tốc độ truyền tải dữ liệu, giảm độ trễ và tối ưu hóa hiệu suất mạng. Các tính năng nổi bật như multiplexing, nén header, prioritization, và server push đã khắc phục nhiều hạn chế của HTTP/1.1 như head-of-line blocking, overhead lớn, và thiếu khả năng kiểm soát ưu tiên.

HTTP/2 vẫn duy trì mô hình request/response quen thuộc của HTTP, nhưng thay đổi cách thức truyền tải, cách kết nối và định dạng truyền đã mang lại hiệu quả vượt trội mà không phá vỡ tính tương thích với các ứng dụng web hiện tại.

Qua bài viết này hy vọng mọi người có thêm kiến thức về HTTP. Ngoài ra mọi người có thể tham khảo video bên dưới, so sánh tốc độ khi tải ảnh giữa HTTP/1.1 và HTTP/2.

Tham khảo thêm:

https://alexandrehtrb.github.io/posts/2024/03/http2-and-http3-explained/

https://engineering.salesforce.com/the-full-picture-on-http-2-and-hol-blocking-7f964b34d205/

beginner
systemdesign

Bài viết liên quan

Cache strategies - Lựa chọn chiến lược nào cho dự án của bạn?

I. Giới thiệu Bạn hẳn đã quen thuộc với khái niệm cache rồi nhỉ? Khi ứng dụng chạy chậm, giải pháp thường nghĩ đến là dùng cache – nghe có vẻ đơn giản. Nhưng triển khai cache như thế nào để vừa đạt hiệu quả cao, vừa đảm bảo tính chính xác của dữ liệu lại là một bài toán không hề dễ. Trong bài viết này, chúng ta sẽ cùng tìm hiểu 5 chiến lược caching phổ biến, phân tích ưu nhược điểm của từng chiến lược và khám phá cách áp dụng chúng vào các tình huống thực tế để tối ưu hiệu suất hệ thống nhé.

Lost Update: Tồn kho còn 1, nhiều người cùng order thì xử lý thế nào?

by @HieuHocCode I. Giới thiệu Hãy tưởng tượng bạn đang xây dựng một sàn thương mại điện tử và gặp phải tình huống sản phẩm chỉ còn 1, nhưng có đến 2 khách hàng đặt hàng cùng lúc. Làm thế nào để hệ thống xử lý tình huống này một cách chính xác, tránh sai sót? Đây chính là một thách thức phổ biến khi xử lý nhiều transaction đồng thời. Vấn đề này thường liên quan đến khái niệm race condition, trong đó các giao dịch song song sẽ tranh chấp quyền thao tác trên dữ liệu, dẫn đến những tình trạng sa

Log tập trung là gì? Tại sao cần trong microservices (phần 1)

by @hieuhoccode I. Giới thiệu Để đáp ứng nhu cầu phát triển nhanh chóng, dự án mình làm đã chuyển từ mô hình monolithic sang microservices. Tuy nhiên, hệ thống ngày càng phức tạp cũng đặt ra nhiều thách thức. Một trong số đó là vấn đề quản lý và giám sát log: * Khó khăn trong việc debug: Một request có thể đi qua 5-10 services khác nhau, mỗi service sinh ra log riêng biệt. Khi có lỗi, việc truy vết theo các service mất rất nhiều thời gian. * Chậm trễ trong phản ứng sự cố: Team thường phát

Tổng Hợp Các Cách Sinh ID Trong Hệ Phân Tán

1. Vấn đề Thực thể (entity) trong cơ sở dữ liệu cần có tối thiểu 2 thuộc tính đó là ID và status. Trong ID là một giá trị duy nhất dùng để xác định một đối tượng cụ thể trong một hệ thống hoặc một bản ghi trong cơ sở dữ liệu. ID là trường thông tin rất quan trọng vì nó đảm bảo tính nhất quán (không trùng lặp) trong quản lý thông tin. ID có thể là một chuỗi các ký tự (550e8400-e29b-41d4-a716-446655440000) hoặc một dãy số tăng dần (1, 2, 3, …). Ví dụ cột ID là primary key với thuộc tính auto_inc

System Design (Thiết Kế Hệ Thống) là gì? Cần thu thập những thông tin gì để có thể bắt tay vào thiết kế?

System Design (thiết kế hệ thống) là quá trình xác định được kiểu kiến trúc (architecture), thành phần (module), giao diện (interfaces) và dữ liệu (data) cho một hệ thống để đáp ứng được một tập yêu cầu cụ thể (specified requirements).

Tất cả bài viết
logo

HỘ KINH DOANH LẬP VƯƠNG

Giấy chứng nhận đăng ký doanh nghiệp số: 8656162915-001. Cấp ngày 21/02/2024. Nơi cấp: Sở Kế hoạch và Đầu tư TP. Hà Nội

PHƯƠNG THỨC THANH TOÁN

vnpay

LIÊN HỆ

roninengineer88@gmail.com

0362228388

26 ngõ 156 Hồng Mai, Hai Bà Trưng, Hà Nội

THEO DÕI CHÚNG TÔI

Facebook

Youtube

Tiktok

CHÍNH SÁCH

Chính sách bảo mật

Chính sách thanh toán

Đổi trả/Hoàn tiền

Hướng dẫn thanh toán VNPAY

PHƯƠNG THỨC THANH TOÁN

vnpay

Ronin Engineer 2024