Vào một ngày đẹp trời năm 2021, mình có ứng tuyển vào một công ty C..., công ty này chỉ có một vòng duy nhất phỏng vấn. Khi mình đang demo con app sịn sò của mình và request ra sao thì xuất hiện 3 request với 3 loại protocol khác nhau: Rồi xong, tiện đó anh phỏng vấn hỏi luôn: sự khác nhau giữa http/1.1 và http/2, http/3 là gì? Làm web ngần ấy thời gian thú thật mình cũng chưa vọc để tìm hiểu, nên không trả lời được với khuôn mặt đờ đẫn. (. Nhưng ae yên tâm, hôm nay chúng ta sẽ tìm hiểu chúng là gì và sự khác biệt giữa chúng.
HTTP là gì?
- HTTP (Hypertext Transfer Protocol) là giao thức truyền tải siêu văn bản. Đây là giao thức tiêu chuẩn cho World Wide Web (www) để truyền tải dữ liệu dưới dạng văn bản, âm thanh, hình ảnh, video từ Web Server tới trình duyệt web của người dùng và ngược lại.
- Là giao thức ứng dụng của bộ giao thức TCP/IP (các giao thức nền tảng cho Internet).
- HTTP hoạt động theo mô hình Client và Server. Quá trình truy cập website chủ yêu là sự giao tiếp của hai đối tượng trên. Khi truy cập vào một trang web qua giao thức HTTP, trình duyệt sẽ thực hiện các phiên kết nối đến server của trang web đó thông qua địa chỉ IP mà hệ thống phân giải tên miền DNS cung cấp. Máy chủ sau khi nhận request sẽ trả về response tương ứng giúp hiển thị website, bao gồm như văn bản, hình ảnh, video...
- Những data được truyền đi thông qua giao thức này không hề được mã hóa hay bảo mật => kẽ hở mà các hacker hay lợi dụng.
- Có 3 loại phiên bản chính, chúng ta sẽ tìm hiểu ở phần sau bài viết này.
HTTPS là gì?
- HTTPS (Hypertext Transfer Protocol Secure) là giao thức truyền tải siêu văn bản an toàn. Bản chất, nó vẫn là giao thức HTTP nhưng có thêm chứng chỉ SSL hoặc TSL nhằm mã hóa data giao tiếp để tăng tính bảo mật hơn.
- Tham khảo:
HTTP/1.1
-
Được giới thiệu vào năm 1997, nó nhanh chóng trở thành protocol tiêu chuẩn cho web.
-
Sử dụng giao thức TCP.
-
Chúng ta đi đến tìm hiểu ưu và nhược điểm của giao thức này:
- Ưu điểm:
-
Persistent connections: không giống HTTP 1.0, kết nối được đóng sau mỗi request-response, HTTP 1.1 giới thiệu Persistent connections cho phép giữ kết nối liên tục từ request-response này đến request-response khác qua một kết nối TCP duy nhất giúp giảm độ trễ và cải thiện hiệu năng vì không cần tạo kết nối mới cho mỗi request.
-
Pipelining:
- Cho phép gửi nhiều request trong một kết nối duy nhất, mà không phải chờ response từ những request trước.
- Vì nhiều request gửi cùng một lúc, nên có thể gặp tình trạng client không phân biệt được response nào là của request nào, vì vậy quy tắc là request thứ tự bao nhiêu thì response phải trả về đúng thứ tự đó.
- Nếu request có gói tin bị thất lạc (do gói tin lớn hoặc đường truyền) dẫn đến request bị chờ lâu khiến connection bị block dẫn đến những request sẽ bị chặn lại cho đến khi request đó được giải quyết xong, vấn đề này được biết đến với tên gọi là TCP Head-of-line blocking (HOL).
-
Caching
- HTTP 1/1 hỗ trợ cơ chế caching, giúp giảm thiểu request trực tiếp giữa client và server bằng cách sử dụng các chỉ thị của cache-control.
-
Chunked transfer encoding
- Tính năng này cho phép server gửi response theo từng phần nhỏ hơn thay vì phải chờ toàn bộ response được hoàn tất để trả về cho client giúp cải thiện hiệu suất và cảm nhận trang web.
-
Improved error handling
- Hiển thị chi tiết mã lỗi hơn, giúp cải thiện khả năng xử lý lỗi, giúp nhà phát triển nhanh tìm ra vấn đề và khắc phục chúng.
-
HTTP 1/1 với những ưu điểm trên đã góp phần rất lớn trong sự phát triển của WWW. Tuy nhiên nó cũng có những hạn chế mà đã khắc phục được ở phiên bản mới hơn như HTTP/2 và HTTP/3.
- Nhược điểm:
- Lack of multiplexing: HTTP 1.1 chỉ cho phép gửi một request và response qua một kết nối tại một thời điểm, điều này có thể dẫn đến các vấn đề về hiệu suất khi nhiều yêu cầu được thực hiện đồng thời. Tuy pipeline gửi được đồng thời nhưng vẫn có hạn chế về thứ tự request và rủi ro khi bị block request.
- Head-of-line blocking:
- Mỗi kết nối HTTP/1.1 chỉ có thể xử lý một yêu cầu tại một thời điểm. Hạn chế này thường dẫn đến việc sử dụng tài nguyên mạng không hiệu quả, vì các yêu cầu tiếp theo phải đợi yêu cầu trước đó hoàn tất. Nếu một request bị block thì tất cả request còn lại sẽ dừng.
- Lack of prioritization: HTTP/1.1 không hỗ trợ cơ chế ưu tiên request, vì vậy các request có thể xử lý ở bất kì thứ tự nào, dù nó có quan trọng hoặc khẩn cấp hay không.
- Không hỗ trợ server push: HTTP/1.1 không hỗ trợ server push, tức là server không thể nào gửi dữ liệu cho client nếu client không gửi request cho server.
- Header inefficiency: header được gửi ở mỗi request và response dưới dạng plain text, dẫn đến kết quả có thể nhiều, gây ra chậm hiệu suất, đặc biệt khi gửi dữ liệu lớn hoặc sử dụng cookies. Những hạn chế này đã được giải quyết trong các phiên bản HTTP mới hơn, chẳng hạn như HTTP/2 và HTTP/3, cung cấp các tính năng như multiplexing, header compression, request prioritization, server push và cải thiện khả năng xử lý các kết nối TCP.
- Ưu điểm:
HTTP/2
- Là phiên bản update của HTTP/1.1, được giới thiệu vào năm 2015. Nó được thiết kế để giải quyết một số hạn chế và vấn đề về hiệu suất của HTTP/1.1, đồng thời cải thiện tốc độ và hiệu quả của giao tiếp web.
- Sử dụng giao thức TCP. Sau đây sẽ đi đến tìm hiểu ưu và nhược điểm của giao thức này:
- Ưu điểm:
- Multiplexing:
- HTTP/2 cho phép gửi nhiều request và response qua một kết nối duy nhất, giúp cải thiện hiệu suất của giao thức bằng cách giảm chi phí thiết lập kết nối mới.
- Binary protocol:
- HTTP/2 sử dụng Binary protocol thay vì text-based protocol được sử dụng trong HTTP/1.1. Điều này làm giảm kích thước dữ liệu được truyền giữa máy khách và máy chủ, nâng cao hiệu quả của giao thức và tránh lỗi bởi vì dữ liệu nhị phân không cần xử lý những trường hợp như khoảng trắng, in hoa, xuống dòng, dòng trống...
- Header compression: HTTP/2 sử dụng thuật toán HPACK nén header giúp giảm kích thước của dữ liệu header, khắc phục hạn chế của HTTP/1.1. Điều này cũng giúp cải thiện hiệu quả của giao thức và giảm độ trễ.
- Server push: Với HTTP/2, máy chủ có thể chủ động đẩy tài nguyên vào bộ nhớ cache của máy khách trước khi nhận được request, giảm độ trễ và cải thiện trải nghiệm tổng thể của người dùng.
- Prioritization: HTTP/2 cho phép ưu tiên các request, cho phép tìm nạp và hiển thị nhiều tài nguyên quan trọng hơn trước. Mặc dù HTTP/2 mang lại những cải tiến hiệu suất đáng kể so với HTTP/1.1 nhưng cũng có một số nhược điểm tiềm ẩn cần xem xét:
- Phức tạp trong triển khai: HTTP/2 là một giao thức phức tạp hơn HTTP/1.1, điều này có thể gây khó khăn và tốn thời gian hơn trong việc triển khai và duy trì.
- Tiêu thụ tài nguyên máy chủ: HTTP/2 có thể tiêu tốn nhiều tài nguyên máy chủ hơn HTTP/1.1, đặc biệt trong trường hợp thiết lập một số lượng lớn kết nối đồng thời.
- Khả năng tương thích: Không phải tất cả máy chủ và trình duyệt web đều hỗ trợ HTTP/2 và một số ứng dụng cũ hơn có thể không tương thích với giao thức mới. Điều này có thể dẫn đến các vấn đề về khả năng tương thích và có thể yêu cầu cấu hình và test bổ sung.
- Vấn đề về an ninh: Việc sử dụng dữ liệu nhị phân trong HTTP/2 có thể gây khó khăn hơn cho việc kiểm tra và bảo mật lưu lượng truy cập mạng, điều này có thể dẫn đến các lỗ hổng bảo mật.
- Về performance: Mặc dù HTTP/2 mang lại những cải tiến đáng kể so với HTTP/1.1 nhưng hiệu suất của nó vẫn bị hạn chế bởi các yếu tố như độ trễ mạng và băng thông do sử dụng giao thức TCP, những yếu tố này có thể ảnh hưởng đến tốc độ và hiệu quả chung của giao tiếp web. HTTP/2 dựa trên cùng một giao thức với HTTP/1.1 là TCP để hoạt động. Việc sử dụng TCP có những ưu và nhược điểm nhất định, ưu điểm là do HTTP/1.1 đã sử dụng giao thức TCP nên việc triển khai giao thức HTTP/2 sẽ dễ dàng và thuận tiện hơn, còn nhược điểm là giao thức TCP có đỗ trễ cao và dễ mất mát dữ liệu.
- Multiplexing:
HTTP/3
- HTTP/3 là phiên bản mới nhất của giao thức HTTP, nó được thiết kế để cải thiện hiệu năng và bảo mật.
- HTTP/3 loại bỏ TCP, thay vào đó sử dụng UDP được gọi là Quick UDP Internet Connections (viết tắt là QUIC).
- QUIC có một số lợi ích:
- Built-in encryption: QUIC kết hợp TLS encryption theo mặc định, đảm bảo kết nối an toàn mà không cần phải sử dụng TLS theo cách tách biệt, điều này làm giảm độ trễ và cải thiện thời gian thiết lập kết nối.
- Giảm khả năng head-of-line blocking: không giống TCP, QUIC xử lý mất gói tin ở steam riêng lẻ, điều này giúp cho không block connection, giúp giảm khả năng bị HOL blocking.
- Connection migration: QUIC được thiết kế để hỗ trợ connection migration, cho phép client thay đổi địa chỉ IP mà không mất kết nối hoặc phát sinh thêm độ trễ.
- Thiết lập kết nối 0-RTT: cho phép thiết lập kết nối 0-RTT trong một số trường hợp nhất định, điều này có thể giảm đáng kể độ trễ khi kết nối với máy chủ đã truy cập trước đó.
- Kiểm soát tốt tình trạng tắc nghẽn các gói tin.
- Sự khác nhau HTTP/2 và HTTP/3:
- Protocol: HTTP/2 sử dụng TCP còn HTTP/3 sử dụng QUIC.
- Multiplexing: HTTP/3 sử dụng một hình thức multiplexing hiệu quả hơn, được gọi là multiplexing “datagram” hoặc “streaming”.
- Header compression: Cả HTTP/2 và HTTP/3 đều sử dụng tính năng header compression để giảm kích thước header của request và response. Tuy nhiên, HTTP/3 sử dụng một header compression hiệu quả hơn được gọi là “QPACK”.
- Server push: HTTP/3 cung cấp chức năng hiệu quả hơn HTTP/2.
- Security: Cả HTTP/2 và HTTP/3 đều yêu cầu sử dụng mã hóa TLS để bảo mật giao tiếp giữa máy khách và máy chủ. Tuy nhiên, HTTP/3 cung cấp khả năng bảo mật được cải thiện so với HTTP/2, đặc biệt liên quan đến các vấn đề như tấn công denial-of-service, và giảm độ trễ hơn so với HTTP/2.
- Compatibility: HTTP/3 là một giao thức tương đối mới và không phải tất cả máy chủ web, máy khách và mạng đều hỗ trợ giao thức này. Điều này có thể hạn chế việc áp dụng nó, đặc biệt đối với các hệ thống cũ. Mặt khác, HTTP/2 được hỗ trợ rộng rãi hơn.* Nhìn chung, HTTP/3 được xây dựng dựa trên những cải tiến được thực hiện trong HTTP/2 và thậm chí còn mang lại hiệu suất, tính bảo mật và độ tin cậy tốt hơn. Tuy nhiên, tính mới tương đối của nó có thể hạn chế việc áp dụng nó cho đến khi nó được hỗ trợ rộng rãi hơn.
Tham khảo: https://accreditly.io/articles/the-differences-between-http-11-http2-and-http3
https://www.javacodegeeks.com/2023/03/http-1-1-vs-http-2-vs-http-3-key-differences.html