การบีบอัด GZIP คืออะไร?
GZIP เป็นรูปแบบการบีบอัดไฟล์แบบไม่สูญเสียข้อมูลที่กำหนดโดย RFC 1952 มันห่อหุ้ม payload ที่ผลิตโดยอัลกอริทึม DEFLATE (RFC 1951) ซึ่งรวมการอ้างอิงย้อนกลับ LZ77 เข้ากับการเข้ารหัส Huffman เพื่อย่อข้อมูลที่ซ้ำซ้อนให้เป็นกระแสไบต์ที่กระชับ
การบีบอัด GZIP ทำงานอย่างไร?
ข้อมูลของคุณจะถูกประมวลผลทั้งหมดในเบราว์เซอร์โดยใช้ API ที่มาในตัว CompressionStream('gzip') ขั้นตอนระดับสูงมีดังนี้:
- เครื่องมือจะแปลงข้อความหรือไฟล์ของคุณเป็นกระแสไบต์ (UTF-8 สำหรับข้อมูลข้อความ)
- ไบต์เหล่านั้นถูกป้อนผ่าน
CompressionStreamที่ตั้งค่าไว้สำหรับรูปแบบgzip - เบราว์เซอร์ใช้ DEFLATE: การเดินผ่าน LZ77 แบบหน้าต่างเลื่อนค้นหาลำดับที่ซ้ำกัน และการเข้ารหัส Huffman กำหนดรหัสที่สั้นกว่าให้กับสัญลักษณ์ทั่วไป
- ส่วนหัว gzip ขนาด 10 ไบต์และส่วนท้ายขนาด 8 ไบต์ (CRC32 ของข้อมูลต้นฉบับและความยาวต้นฉบับโมดูโล 2^32) ถูกห่อหุ้มรอบ payload DEFLATE สร้างคอนเทนเนอร์ .gz มาตรฐาน
- ผลลัพธ์จะแสดงเป็น Base64 หรือเลขฐานสิบหกสำหรับข้อมูลข้อความ หรือเป็นไฟล์ .gz ที่ดาวน์โหลดได้สำหรับข้อมูลไบนารี
ทำไมจึงบีบอัดด้วย GZIP?
- Payload เล็กลง: ข้อความ JSON HTML CSS และซอร์สโค้ดมักจะหดเหลือเพียงเศษเสี้ยวของขนาดเดิม
- มาตรฐานอุตสาหกรรม: GZIP เป็นที่เข้าใจของเซิร์ฟเวอร์ HTTP, CDN, เบราว์เซอร์, เครื่องมือเก็บถาวร และไลบรารีมาตรฐานของภาษาโปรแกรมเกือบทุกตัว
- ความเป็นส่วนตัว: การบีบอัดเกิดขึ้นทั้งหมดในเบราว์เซอร์ของคุณ ข้อมูลไม่เคยไปถึงเซิร์ฟเวอร์ของเรา
- พร้อมไป-กลับ: ผลลัพธ์สามารถคลายบีบอัดได้ด้วย CLI
gunzip, ด้วย HTTPContent-Encoding: gzipและด้วยตัวอ่าน RFC 1952 ใน Python, Node.js, Go, Java หรือ Rust
การใช้งานทั่วไปของการบีบอัด GZIP มีอะไรบ้าง?
GZIP ใช้กันทั่วเว็บและในเครื่องมือบรรทัดคำสั่ง:
- การถ่ายโอน HTTP: เว็บเซิร์ฟเวอร์บีบอัดการตอบกลับด้วย GZIP เพื่อให้หน้าเว็บโหลดเร็วขึ้นผ่านเครือข่าย
- การเก็บถาวรล็อก: ล็อกเซิร์ฟเวอร์ที่เก็บไว้ระยะยาวจะถูกเก็บเป็นไฟล์ .gz เพื่อลดการใช้ดิสก์
- การสำรองข้อมูลและบันเดิล: tarball (.tar.gz) บีบอัดทรีไดเรกทอรีทั้งหมดเพื่อการแจกจ่ายที่พกพาได้
ตัวอย่างการบีบอัด GZIP มีลักษณะอย่างไร?
เอกสาร JSON ขนาด 1 KB ที่มีชื่อฟิลด์ซ้ำหลายชื่อมักจะบีบอัดเหลือประมาณ 200–300 ไบต์ — ลดขนาดสี่ถึงห้าเท่า ล็อกข้อความขนาดใหญ่มักบีบอัดได้ 90% หรือมากกว่า ข้อมูลที่บีบอัดแล้ว (JPEG, PNG, MP4, ZIP) จะไม่หดอีกและอาจขยายเพิ่มอีกไม่กี่ไบต์เนื่องจากการห่อหุ้ม GZIP
ตัวบีบอัด GZIP นี้สร้างเอาต์พุต RFC 1952 มาตรฐานในเบราว์เซอร์ของคุณโดยตรง ไม่ว่าคุณจะลดขนาด payload ก่อนส่งหรือสร้างไฟล์ .gz เพื่อเก็บถาวร ผลลัพธ์สามารถทำงานร่วมกับเครื่องมือทุกตัวที่รู้จัก GZIP บนเครือข่าย