HTTP/2

HTTP/2 (ban đầu có tên HTTP/2.0) là phiên bản cải tiến lớn của giao thức mạng HTTP được sử dụng bởi World Wide Web. HTTP/2 được phát triển dựa trên giao thức thử nghiệm SPDY do Google phát triển, và được chuẩn hóa bởi Nhóm công tác HTTP (httpbis) thuộc Lực lượng Đặc nhiệm Kỹ thuật Internet (IETF).

HTTP/2 được phê duyệt làm Tiêu chuẩn đề xuất vào ngày 17 tháng 2 năm 2015, và được xuất bản chính thức dưới dạng RFC 7540 vào ngày 14 tháng 5 năm 2015. Đây là phiên bản mới đầu tiên của HTTP kể từ HTTP/1.1 được chuẩn hóa trong RFC 2068 năm 1997.

 Lịch sử 
 Từ SPDY đến HTTP/2 
HTTP/2 bắt nguồn từ giao thức SPDY (phát âm là "speedy", nghĩa là "nhanh"), được phát triển bởi một dự án nghiên cứu do Google dẫn đầu. SPDY được thiết kế nhằm giảm thời gian tải trang web bằng các kỹ thuật như nén, ghép kênh (multiplexing) và ưu tiên hóa.

Điểm khác biệt lớn nhất giữa HTTP/1.1 và SPDY là mỗi hành động của người dùng trong SPDY được gán một "stream ID" (mã định danh luồng), cho phép sử dụng một kênh TCP duy nhất kết nối người dùng với máy chủ. SPDY cho thấy cải thiện rõ rệt so với HTTP, với tốc độ tải trang tăng từ 11% đến 47%.

 Quá trình tiêu chuẩn hóa 
Nhóm công tác HTTP (httpbis) của IETF đã sử dụng SPDY làm điểm khởi đầu cho việc phát triển HTTP/2. Trong quá trình phát triển, một trong những thay đổi quan trọng là HTTP/2 sử dụng thuật toán nén header dựa trên mã Huffman cố định thay vì nén dựa trên luồng động của SPDY, nhằm giảm nguy cơ tấn công như CRIME attack.

Vào tháng 12 năm 2014, Nhóm công tác đã trình HTTP/2 lên IESG để xem xét, và được phê duyệt làm Tiêu chuẩn đề xuất vào ngày 17 tháng 2 năm 2015. Đặc tả chi tiết được xuất bản dưới dạng RFC 7540 vào ngày 14 tháng 5 năm 2015.

Vào ngày 9 tháng 2 năm 2015, Google thông báo kế hoạch loại bỏ hỗ trợ cho SPDY trong Chrome để ưu tiên cho HTTP/2.

 Đặc điểm kỹ thuật 
 Mục tiêu thiết kế 
HTTP/2 được thiết kế với các mục tiêu chính sau:

 Tạo cơ chế thương lượng cho phép máy khách và máy chủ lựa chọn HTTP/1.1, HTTP/2 hoặc các giao thức khác
 Duy trì khả năng tương thích cao với HTTP/1.1 (ví dụ: phương thức, mã trạng thái, URI và hầu hết các trường header)
 Giảm độ trễ để cải thiện tốc độ tải trang trong trình duyệt web
 Hỗ trợ các trường hợp sử dụng phổ biến của HTTP như trình duyệt web, API web, máy chủ web, proxy và mạng phân phối nội dung

HTTP/2 giữ nguyên tất cả ngữ nghĩa cấp cao của HTTP/1.1, như phương thức, mã trạng thái, trường header và URI. Điều này có nghĩa là các ứng dụng web hiện tại không cần thay đổi để hoạt động với HTTP/2, nhưng các ứng dụng mới có thể tận dụng các tính năng mới để tăng tốc độ.

 Các tính năng chính 
 Giao thức nhị phân 
Khác với HTTP/1.1 sử dụng giao thức văn bản, HTTP/2 sử dụng giao thức nhị phân. Điều này mang lại nhiều lợi ích:

 Tiêu tốn ít băng thông hơn
 Phân tích cú pháp hiệu quả hơn
 Ít lỗi hơn
 Giảm tải mạng
 Loại bỏ các vấn đề bảo mật liên quan đến bản chất văn bản của HTTP/1.1 như tấn công phân tách phản hồi

 Ghép kênh (Multiplexing) 
Ghép kênh là tính năng tiên tiến nhất của HTTP/2, cho phép gửi nhiều yêu cầu dữ liệu song song qua một kết nối TCP duy nhất. Điều này:

 Cho phép tải xuống các tệp web không đồng bộ từ một máy chủ
 Giải quyết vấn đề head-of-line blocking ở cấp giao dịch HTTP trong HTTP/1.1
 Giảm thời gian vòng lặp (RTT - Round Trip Time)
 Làm cho trang web tải nhanh hơn mà không cần tối ưu hóa bổ sung
 Loại bỏ nhu cầu phân mảnh tên miền (domain sharding)

 Nén header (Header Compression) 
HTTP/2 nén một số lượng lớn các khung header dư thừa bằng đặc tả HPACK. Cách thức hoạt động:

 Cả máy khách và máy chủ duy trì danh sách các header đã sử dụng trong các yêu cầu trước đó
 HPACK nén giá trị riêng lẻ của mỗi header trước khi chuyển đến máy chủ
 Máy chủ tra cứu thông tin được mã hóa trong danh sách đã lưu trữ

Điều này giảm đáng kể chi phí do cơ chế khởi động chậm (slow-start) của TCP gây ra.

 Ưu tiên hóa luồng (Stream Prioritization) 
HTTP/2 cung cấp cho nhà phát triển khả năng kiểm soát chi tiết về ưu tiên hóa, cho phép họ quyết định tài nguyên nào của trang sẽ được tải trước. Tính năng này được gọi là "weighted prioritization" (ưu tiên hóa có trọng số):

 Nhà phát triển có thể gán giá trị trọng số khác nhau cho các luồng dữ liệu
 Giá trị này cho máy khách biết luồng dữ liệu nào cần hiển thị trước
 Tối đa hóa tốc độ tải trang cả về mặt cảm nhận lẫn thực tế

 Server Push 
Server Push cho phép máy chủ gửi thêm thông tin có thể lưu vào bộ nhớ cache mà máy khách chưa yêu cầu nhưng được dự đoán sẽ cần trong tương lai. Ví dụ:

 Khi máy khách yêu cầu tệp HTML, máy chủ có thể gửi kèm các tệp CSS và JavaScript liên quan
 Điều này loại bỏ chi phí của chu kỳ yêu cầu bổ sung
 Giảm độ trễ mạng và cải thiện thông lượng

 Kiểm soát luồng (Flow Control) 
HTTP/2 cung cấp kiểm soát luồng ở cả cấp độ luồng riêng lẻ và toàn bộ kết nối. Điều này cho phép:

 Máy khách có thể tải scan đầu tiên của hình ảnh, hiển thị cho người dùng để xem trước
 Trong khi đó ưu tiên tải các tài nguyên quan trọng hơn
 Sau khi tải xong tài nguyên quan trọng, tiếp tục tải phần còn lại của hình ảnh

 So sánh với HTTP/1.1 
 Đặc điểm  HTTP/1.1  HTTP/2 Định dạng giao thức  Văn bản  Nhị phân Số yêu cầu trên một kết nối TCP  Tuần tự (lần lượt)  Song song (ghép kênh) Vấn đề chặn đầu dòng (Head-of-Line Blocking)  Có  Không (ở cấp HTTP) Nén header  Không  Có (HPACK) Server Push  Không  Có Ưu tiên hóa tài nguyên  Hạn chế  Có trọng số Độ trễ  Cao hơn (nhiều kết nối TCP)  Thấp hơn (ghép kênh) Sử dụng băng thông  Cao hơn (header dư thừa)  Thấp hơn (nén HPACK) Bảo mật  HTTP và HTTPS  Hầu hết yêu cầu HTTPS

 Cải thiện hiệu suất 
Các nghiên cứu cho thấy HTTP/2 mang lại cải thiện đáng kể về hiệu suất:

 LinkedIn giảm thời gian tải trang 34% khi chuyển sang HTTP/2
 SPDY (tiền thân của HTTP/2) cho thấy cải thiện tốc độ từ 11% đến 47%
 Giảm đáng kể thời gian vòng lặp (RTT)

 Hỗ trợ và triển khai 
 Hỗ trợ trình duyệt 
Hầu hết các trình duyệt web chính đã thêm hỗ trợ HTTP/2 vào cuối năm 2015, bao gồm:

 Google Chrome
 Mozilla Firefox
 Safari
 Microsoft Edge
 Opera
 Internet Explorer 11
 Amazon Silk

Tính đến năm 2020, khoảng 98% trình duyệt web đang được sử dụng có khả năng hỗ trợ HTTP/2.

Lưu ý quan trọng: Mặc dù đặc tả HTTP/2 không bắt buộc sử dụng mã hóa, nhưng tất cả các trình duyệt chính đều chỉ hỗ trợ HTTP/2 qua TLS (HTTPS), khiến mã hóa trở thành bắt buộc trên thực tế.

 Mức độ triển khai 
Theo W3Techs, tính đến tháng 1 năm 2021, 50,2% trong số 10 triệu trang web hàng đầu đã hỗ trợ HTTP/2. Theo Web Almanac năm 2022, 77% yêu cầu sử dụng HTTP/2 và 66% trang web sử dụng giao thức này.

 Cấu hình và URI 
HTTP/2 được định nghĩa cho cả hai loại URI:

 h2c: HTTP URI không có mã hóa TLS
 h2: HTTPS URI qua TLS (yêu cầu TLS 1.2 trở lên) sử dụng phần mở rộng ALPN

 HTTP/3 - Thế hệ kế tiếp 

Sản phẩm kế nhiệm được đề xuất của HTTP/2 là HTTP/3, một bản cải tiến lớn dựa trên các khái niệm do HTTP/2 thiết lập. Điểm khác biệt chính là HTTP/3 chạy trên giao thức QUIC thay vì TCP, được thiết kế để nhanh hơn và an toàn hơn cho nhu cầu của Internet hiện đại.

Hỗ trợ cho HTTP/3 đã được thêm vào:

 Chrome (tháng 9 năm 2019)
 Safari 14 trên macOS Big Sur (2020) - trình duyệt đầu tiên hỗ trợ HTTP/3 theo mặc định
 Firefox Nightly (tháng 11 năm 2019)

 Lợi ích 
HTTP/2 mang lại nhiều lợi ích cho cả nhà phát triển và người dùng:

 Tốc độ tải trang nhanh hơn: Giảm thời gian tải trang đáng kể, cải thiện trải nghiệm người dùng
 Tối ưu hóa băng thông: Sử dụng băng thông hiệu quả hơn nhờ nén header và ghép kênh
 Cải thiện SEO: Google ưu tiên các trang web sử dụng HTTP/2
 Bảo mật tốt hơn: Hỗ trợ TLS hiệu quả hơn, bảo vệ khỏi tin tặc và bot độc hại
 Giảm chi phí vận hành: Sử dụng tài nguyên mạng và máy chủ hiệu quả hơn

 Hạn chế 
Mặc dù có nhiều cải tiến, HTTP/2 vẫn có một số hạn chế:

 Head-of-line blocking ở tầng TCP: Vì HTTP/2 chạy trên một kết nối TCP duy nhất, vẫn có khả năng xảy ra head-of-line blocking nếu các gói TCP bị mất hoặc bị trễ trong quá trình truyền
 Độ phức tạp triển khai: Yêu cầu nâng cấp máy chủ và cấu hình HTTPS
 Vấn đề tương thích: Cần đảm bảo tất cả máy chủ được nâng cấp từ HTTP/1.1

 Phê bình 
Nhà phát triển FreeBSD và Varnish, Poul-Henning Kamp, đã chỉ trích rằng tiêu chuẩn được chuẩn bị theo lịch trình không thực tế ngắn, dẫn đến việc chỉ có thể dựa trên giao thức SPDY và bỏ lỡ các cơ hội cải tiến khác. Ông cũng chỉ trích giao thức vì không nhất quán, có độ phức tạp không cần thiết và vi phạm nguyên tắc phân lớp giao thức.

 Xem thêm 
 HTTP/1.1
 HTTP/3
 SPDY
 QUIC
 Transport Layer Security (TLS)
 World Wide Web

 Tham khảo 

 Liên kết ngoài 
 Trang chủ chính thức HTTP/2
 RFC 7540 - HTTP/2
 RFC 7541 - HPACK Header Compression
 Akamai HTTP/2 Demo

Thể loại:World Wide Web
Thể loại:HTTP
Thể loại:Giao thức tầng ứng dụng
Thể loại:Công nghệ Google
Thể loại:Giới thiệu năm 2015