Nén GZIP là gì?
GZIP là định dạng nén tệp không mất dữ liệu được định nghĩa bởi RFC 1952. Nó đóng gói tải trọng được tạo ra bởi thuật toán DEFLATE (RFC 1951), kết hợp tham chiếu lùi LZ77 với mã hóa Huffman để thu gọn dữ liệu lặp lại thành luồng byte gọn nhẹ.
Nén GZIP hoạt động như thế nào?
Đầu vào của bạn được xử lý hoàn toàn trong trình duyệt bằng API gốc CompressionStream('gzip'). Các bước cấp cao là:
- Công cụ chuyển đổi văn bản hoặc tệp của bạn thành luồng byte (UTF-8 cho đầu vào văn bản).
- Các byte đó được đưa qua một
CompressionStreamđược cấu hình cho định dạnggzip. - Trình duyệt áp dụng DEFLATE: lượt LZ77 với cửa sổ trượt tìm các chuỗi lặp lại, và mã hóa Huffman gán mã ngắn hơn cho các ký hiệu phổ biến.
- Một tiêu đề gzip 10 byte và phần đuôi 8 byte (CRC32 của dữ liệu gốc cộng với độ dài gốc modulo 2^32) được bọc quanh tải trọng DEFLATE, tạo ra một bộ chứa .gz tiêu chuẩn.
- Kết quả được hiển thị dưới dạng Base64 hoặc hex cho đầu vào văn bản, hoặc được cung cấp dưới dạng tệp .gz có thể tải xuống cho đầu vào nhị phân.
Tại sao nén bằng GZIP?
- Tải trọng nhỏ hơn: văn bản, JSON, HTML, CSS và mã nguồn thường thu nhỏ xuống một phần kích thước gốc.
- Tiêu chuẩn ngành: GZIP được hiểu bởi hầu như mọi máy chủ HTTP, CDN, trình duyệt, công cụ lưu trữ và thư viện chuẩn của ngôn ngữ lập trình.
- Quyền riêng tư: việc nén diễn ra hoàn toàn trong trình duyệt của bạn. Đầu vào không bao giờ đến máy chủ của chúng tôi.
- Sẵn sàng hai chiều: đầu ra giải nén được với CLI
gunzip, với HTTPContent-Encoding: gzipvà với bất kỳ trình đọc RFC 1952 nào trong Python, Node.js, Go, Java hoặc Rust.
Các ứng dụng phổ biến của nén GZIP là gì?
GZIP được sử dụng khắp web và trong các công cụ dòng lệnh:
- Truyền tải HTTP: máy chủ web nén phản hồi bằng GZIP để các trang tải nhanh hơn qua mạng.
- Lưu trữ nhật ký: nhật ký máy chủ lâu dài được lưu dưới dạng tệp .gz để giảm sử dụng đĩa.
- Sao lưu và đóng gói: tarball (.tar.gz) nén toàn bộ cây thư mục để phân phối di động.
Ví dụ về nén GZIP trông như thế nào?
Một tài liệu JSON 1 KB với nhiều tên trường lặp lại thường được nén xuống khoảng 200–300 byte — giảm kích thước bốn đến năm lần. Các nhật ký văn bản lớn thường nén được 90% hoặc hơn. Các đầu vào đã được nén (JPEG, PNG, MP4, ZIP) sẽ không thu nhỏ thêm và có thể tăng thêm vài byte do khung GZIP.
Bộ nén GZIP này tạo ra đầu ra RFC 1952 tiêu chuẩn ngay trong trình duyệt của bạn. Cho dù bạn đang thu nhỏ tải trọng trước khi truyền hay tạo tệp .gz để lưu trữ, kết quả đều tương thích với mọi công cụ hỗ trợ GZIP trên mạng.