PHANTOM
🇮🇳 IN
Bước tới nội dung

HTTP/2

Bách khoa toàn thư mở Wikipedia

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,[1] 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).[2]

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,[3] 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.[4] Đâ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.[5]

Lịch sử

[sửa | sửa mã nguồn]

Từ SPDY đến HTTP/2

[sửa | sửa mã nguồn]

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.[5] 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.[6]

Đ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ủ.[5] 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%.[5]

Quá trình tiêu chuẩn hóa

[sửa | sửa mã nguồn]

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.[5] 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.[5]

Vào tháng 12 năm 2014, Nhóm công tác đã trình HTTP/2 lên IESG để xem xét,[7] và được phê duyệt làm Tiêu chuẩn đề xuất vào ngày 17 tháng 2 năm 2015.[3] Đặ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.[4]

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.[5]

Đặc điểm kỹ thuật

[sửa | sửa mã nguồn]

Mục tiêu thiết kế

[sửa | sửa mã nguồn]

HTTP/2 được thiết kế với các mục tiêu chính sau:[5]

  • 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.[5] Đ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

[sửa | sửa mã nguồn]

Giao thức nhị phân

[sửa | sửa mã nguồ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.[8] Đ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)

[sửa | sửa mã nguồn]

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.[9] Đ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)

[sửa | sửa mã nguồn]

HTTP/2 nén một số lượng lớn các khung header dư thừa bằng đặc tả HPACK.[10] 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.[8]

Ưu tiên hóa luồng (Stream Prioritization)

[sửa | sửa mã nguồn]

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.[9] 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

[sửa | sửa mã nguồn]

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.[10] 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)

[sửa | sửa mã nguồn]

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.[6] Đ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

[sửa | sửa mã nguồn]
Đặ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) Không (ở cấp HTTP)
Nén header Không Có (HPACK)
Server Push Không
Ư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

[sửa | sửa mã nguồn]

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:[11]

  • 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

[sửa | sửa mã nguồn]

Hỗ trợ trình duyệt

[sửa | sửa mã nguồn]

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:[12]

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.[14]

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ế.[5]

Mức độ triển khai

[sửa | sửa mã nguồn]

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.[15] 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.[16]

Cấu hình và URI

[sửa | sửa mã nguồn]

HTTP/2 được định nghĩa cho cả hai loại URI:[5]

  • 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ửa | sửa mã nguồn]

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.[17] Đ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:[18]

  • 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

[sửa | sửa mã nguồn]

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

  • 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ế

[sửa | sửa mã nguồn]

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

  • 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

[sửa | sửa mã nguồn]

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.[5] Ô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.

Tham khảo

[sửa | sửa mã nguồn]
  1. ^ Bright, Peter (ngày 18 tháng 2 năm 2015). "HTTP/2 finished, coming to browsers within weeks". Ars Technica. Truy cập ngày 18 tháng 1 năm 2026.
  2. ^ Thomson, M. "Hypertext Transfer Protocol version 2: draft-ietf-httpbis-http2-16". ietf.org. HTTPbis Working Group. Truy cập ngày 11 tháng 2 năm 2015.
  3. ^ a b Mark Nottingham (ngày 18 tháng 2 năm 2015). "HTTP/2 Approved". ietf.org. Internet Engineering Task Force. Truy cập ngày 8 tháng 3 năm 2015.
  4. ^ a b "RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)". IETF. tháng 5 năm 2015. Truy cập ngày 14 tháng 5 năm 2015.
  5. ^ a b c d e f g h i j k l m "HTTP/2". Wikipedia (bằng tiếng Anh). Truy cập ngày 18 tháng 1 năm 2026.
  6. ^ a b "HTTP/1.1 vs HTTP/2: What's the Difference?". DigitalOcean. ngày 18 tháng 3 năm 2022. Truy cập ngày 18 tháng 1 năm 2026.
  7. ^ "History for draft-ietf-httpbis-http2-16". IETF. Truy cập ngày 3 tháng 1 năm 2015.
  8. ^ a b "What is HTTP/2". Imperva. ngày 20 tháng 12 năm 2023. Truy cập ngày 18 tháng 1 năm 2026.
  9. ^ a b "HTTP/2 vs. HTTP/1.1". Cloudflare. Truy cập ngày 18 tháng 1 năm 2026.
  10. ^ a b "HTTP/2: the difference between HTTP/1.1, benefits and how to use it". Factory.hr. Truy cập ngày 18 tháng 1 năm 2026.
  11. ^ Kumar, Rajeev (ngày 19 tháng 8 năm 2023). "From HTTP/1.1 to HTTP/2: A New Era of Web Performance". Medium. Truy cập ngày 18 tháng 1 năm 2026.
  12. ^ "HTTP2 browser support". Truy cập ngày 9 tháng 3 năm 2017.
  13. ^ "See what's new in Firefox!". www.mozilla.org. Mozilla Foundation. tháng 2 năm 2015.
  14. ^ "Can I use... Support tables for HTML5, CSS3, etc". caniuse.com. Truy cập ngày 8 tháng 8 năm 2020.
  15. ^ "Usage of HTTP/2 for websites". World Wide Web Technology Surveys. W3Techs. Truy cập ngày 16 tháng 1 năm 2021.
  16. ^ "Modern HTTP: HTTP/1.1 vs HTTP/2 For Performance". DebugBear. ngày 12 tháng 9 năm 2024. Truy cập ngày 18 tháng 1 năm 2026.
  17. ^ Cimpanu, Catalin. "HTTP-over-QUIC to be renamed HTTP/3". ZDNet (bằng tiếng Anh). Truy cập ngày 19 tháng 11 năm 2018.
  18. ^ Cimpanu, Catalin (ngày 26 tháng 9 năm 2019). "Cloudflare, Google Chrome, and Firefox add HTTP/3 support". ZDNet. Truy cập ngày 27 tháng 9 năm 2019.
  19. ^ "Benefits of Using HTTP/2 Over HTTP/1.1". Parachute Design. ngày 19 tháng 12 năm 2024. Truy cập ngày 18 tháng 1 năm 2026.

Liên kết ngoài

[sửa | sửa mã nguồn]

Bản mẫu:Giao thức Internet