30/07/2019, 09:59

HTTP/2 là gì?

HTTP/2 là cuộc cách mạng Hypertext Transfer Protocol (HTTP) mới nhất tính đến thời điểm này. HTTP là giao thức mạng được sử dụng để yêu cầu và nhận page cùng dữ liệu trên môi trường World Wide Web. Công nghệ mới này sẽ dần thay thế chuẩn HTTP/1.1 đã được sử dụng rộng rãi trong hơn hai ...

HTTP/2 là cuộc cách mạng Hypertext Transfer Protocol (HTTP) mới nhất tính đến thời điểm này. HTTP là giao thức mạng được sử dụng để yêu cầu và nhận page cùng dữ liệu trên môi trường World Wide Web. Công nghệ mới này sẽ dần thay thế chuẩn HTTP/1.1 đã được sử dụng rộng rãi trong hơn hai thập kỷ gần đây

HTTP/2 khác HTTP/1.1 ở điểm nào?

Có lẽ HTTP/2 nên được hiểu bằng tên gốc là: HTTP/2.0. Giao thức này được dựa trên giao thức SPDY (đọc là speedy) do Google phát minh năm 2009.

HTTP/1.1 tồn đọng một vài vấn đề. Giao thức ra đời trong thời điểm các web page ít khi vượt quá 100kb dung lượng, CSS vẫn chưa xuất hiện, và tuy JavaScript đã được giới thiệu, nhưng vẫn hiếm khi được sử dụng cho các mục đích khác ngoài hiệu ứng và form xác nhận đơn giản nhất. Mặc dù hiện nay internet đã có băng thông cao, website hỗ trợ Ajax, tuy nhiên ứng dụng single page và framework client-side vẫn còn nhiều năm nữa mới hoàn thiện. Nhưng không ai có thể ngờ lượng request phải xử lý trên web hiện nay lại đạt đến con số đáng sợ như vậy.

Mục tiêu chính của HTTP/2 là giảm độ trễ, và tăng hiệu quả với một vài kỹ thuật cụ thể…

1. HTTP/2 là dữ liệu nhị phân

HTTP/1.1 dùng data dạng text, với hiệu năng nhìn chung kém hơn khi áp dụng lên môi trường mạng.

2. HTTP/2 Headers được nén nhỏ

Thông tin được gửi đi kèm request miêu tả dữ liệu, cùng nguồn gốc, kiểu, độ dài, và thời gian được cache,… của dữ liệu đó. Khác với HTTP/1.1, tất cả thông tin này được nén trong HTTP/2.

3. HTTP/2 Dùng Pipelining

Trong HTTP/1.1, server phải gửi phản hồi theo cùng trật tự nhận request. HTTP/2 thì bất đồng bộ, nên các phản hồi nhỏ hơn hoặc nhanh hơn có thể được xử lý sớm hơn.

4. HTTP/2 đi theo hướng Multiplexed

Trong HTTP/1.1, ở mọi thời điểm, chỉ có một request có thể được xử lý trên một kết nối TCP. Trình duyệt thường mở giữa bốn và tám kết nối, nhưng các gói dữ liệu nặng và chậm có thể khiến quá trình download của các file khác bị delay. HTTP/2 cho phép đồng thời xử lý nhiều request và response messages trên cùng connection (duy nhất).

5. HTTP/2 Implements Server Push

Server có thể gửi trước gói dữ liệu trước khi được yêu cầu. Ví dụ, bạn có thể reference một script ở cuối web page. Trong HTTP/1.1, trình duyệt sẽ tải HTML, phân tích nó, rồi load file JavaScript khi bắt gặp tag <script>. Trong khi đó, mỗi HTTP/2 server có thể push file JavaScript đến trình duyệt trước khi được yêu cầu.

HTTP/2 có tốt hơn trông thấy?

Kết quả sẽ có sự khác biệt với từng hệ thống, nhưng HTTP/1.1 vs HTTP/2 với HTTPS test tool thường chỉ ra HTTP/2 nhanh hơn đến mười lần, dù chạy trên kết nối có bảo mật.

HTTP/2 hiện đã có thể dùng được?

Được chứ. Tuy nhiên, HTTP/2 chỉ được chạy khi cả web server và trình duyệt hỗ trợ giao thức. Kết nối sẽ tự động quay lại HTTP/1.1 như thường khi một trong hai đầu không hỗ trợ. Cuối năm 2016, gần 11% tổng số mười triệu website hàng đầu có hỗ trợ HTTP/2. Tất cả các phiên bản Firefox, Safari, Edge, Chrome gần đây, và các trình duyệt gốc Blink khác đều có hỗ trợ giao thức.

Bạn có thể kểm tra xem host của mình đã kích hoạt HTTP/2 bằng cách nhập URL website của bạn vào HTTP/2 Test tool của keycdn.com.

Nếu đang sử dụng managed hosting hoặc shared hosting, host của bạn thường sẽ cần phải mở HTTP/2. Một số host tích hợp dưới dạng option on/off. Hãy trực tiếp liên lạc họ nếu bạn không chắc nhé.

Nếu đang chạy server riêng hoặc virtual server, HTTP/2 sẽ cần phải được kích hoạt cho bất kỳ web server nào bạn đang sử dụng. Đa số server có hỗ trợ trực tiếp giao thức hoặc có module cài đặt được. Trong đó có Apache, nginx, LiteSpeed, Microsoft IIS và Node.js/Express, nhưng nên nhớ rằng các tính năng có thể khác đi. Ví dụ, nginx hiện nay không hỗ trợ HTTP/2 Server Push.

Tôi có cần nâng cấp website không?

Không — HTTP/2 tương thích ngược với HTTP/1.1. Tuy nhiên, một số pattern lập trình hay bạn đang dùng ngày nay có thể trở thành anti-pattern trong thế giới HTTP/2.

Có lẽ, bạn đang sử dụng build system hoặc manual process để:

  • Chuyển nhiều hình ảnh thành một hình ảnh duy nhất
  • Ghép nối và tối thiểu hóa CSS và JavaScript thành một file duy nhất

Với HTTP/1.1, giảm số request thì tốt, nhưng số HTTP/2 requests khổng lồ lại ít “đắt đỏ” hơn nhiều. Tốt hơn hết, bạn nên gửi nhiều fukem vì khi một file thay đổi, bạn chỉ việc gửi bản cập nhật thôi.

Bạn cũng có thể chuyển nhiều gói dữ liệu đến các domain hay CDN khác nhau để cho phép mở nhiều kết nối HTTP/1.1 hơn. Với HTTP/2, việc này không cần thiết vì bạn có thể thực hiện số lượng request tùy ý trên một kết nối duy nhất. Hơn nữa, nhiều domain độc lập có thể gây giảm hiệu năng do phải gánh thêm DNS look-up và giữ mở kết nối TCP.

Bởi vậy, tôi khuyến khích cách làm thực tế hơn. Concatenation (kết nối) sẽ hiếm khi nào trở thành vấn đề trừ khi bạn kết hợp nhiều file nguồn lớn (thường bị thay đổi). Tóm lại, bạn vẫn chưa cần chuyển hoàn toàn sang HTTP/2 vội nếu phần lớn người dùng vẫn chưa hỗ trợ chuẩn này, và multiple-files và single domains chưa mang đến cải thiện hiệu năng đáng kể.

Techtalk via Sitepoint

0