แปลง GZIP เป็น Deflate
การแปลงสตรีม GZIP เป็น Raw DEFLATE เป็นการถอดส่วนห่อหุ้มไฟล์ด้านนอกและข้อมูลเมตาส่วนหัวออก เหลือไว้เฉพาะเพย์โหลดที่บีบอัดแล้วสำหรับโปรโตคอลเครือข่ายเฉพาะทางและคลังเก็บข้อมูลระดับต่ำ
การเปรียบเทียบรูปแบบและข้อกำหนดทางเทคนิค
| ข้อกำหนด | GZIP | DEFLATE |
|---|---|---|
| ประเภท MIME | application/ | application/ |
| ประเภท | คอนเทนเนอร์สตรีม DEFLATE | สตรีม DEFLATE ดิบ |
| การบีบอัด | DEFLATE (RFC 1951) | LZ77 + การเข้ารหัสแบบ Huffman |
| ข้อกำหนดมาตรฐาน | IETF RFC 1952 | IETF RFC 1950 / RFC 1951 |
| ส่วนหัวที่ระบุลายเซ็นไฟล์ | 1F 8B (gzip ID1/ID2) | 78 01 / 78 9C / 78 DA (zlib header bytes) |
ภาพรวมรูปแบบและการใช้งาน
การแปลงสตรีม GZIP เป็น Raw DEFLATE มักเกิดขึ้นในการพัฒนาเว็บ การเขียนโปรแกรมเครือข่าย และขั้นตอนการจัดเก็บข้อมูลระดับต่ำ นักพัฒนามักจะจัดการกับ GZIP เมื่อบันทึกไฟล์เดี่ยวลงในดิสก์เนื่องจากรูปแบบดังกล่าวมีข้อมูลเมตาที่มีประโยชน์ เช่น ชื่อไฟล์ต้นฉบับและเวลาที่แก้ไข อย่างไรก็ตาม โปรโตคอลการบีบอัด HTTP สมัยใหม่และรูปแบบไบนารีเฉพาะเจาะจงคาดหวังเฉพาะเพย์โหลดที่บีบอัดแล้วโดยไม่มีไบต์ห่อหุ้มใดๆ การดำเนินการแปลงนี้ช่วยให้วิศวกรสามารถป้อนข้อมูลบีบอัดมาตรฐานลงในสตรีมเครือข่ายหรือตัวแยกวิเคราะห์แบบกำหนดเองได้โดยตรง ตัวอย่างเช่น การสร้างตัวจัดการการตอบสนอง HTTP แบบกำหนดเองหรือการทำงานกับไฟล์เก็บถาวร ZIP มักจะต้องถอดส่วนหัว GZIP และส่วนท้าย CRC32 ออกเพื่อแยกเอาต์พุตอัลกอริธึมดิบ การลบข้อมูลคอนเทนเนอร์พิเศษนี้จะช่วยลดภาระโอเวอร์เฮดเมื่อทุกๆ ไบต์มีความสำคัญในสภาพแวดล้อมการเขียนโปรแกรมที่มีข้อจำกัด
ข้อกำหนดทางเทคนิคและรายละเอียดตัวแปลงสัญญาณ
สตรีม GZIP ซึ่งระบุด้วย MIME type application/gzip ใช้โครงสร้างคอนเทนเนอร์ตาม RFC 1952 โดยเริ่มด้วยส่วนหัวลายเซ็นไบต์สองไบต์ (0x1F, 0x8B) ตามด้วยแฟล็กการบีบอัด เวลาแก้ไข รหัสระบบปฏิบัติการ และชื่อไฟล์ที่อาจมีหรือไม่มีก็ได้ ข้อมูลที่บีบอัดจะอยู่ตรงกลางไฟล์ ส่วนท้ายมีเช็คซัม CRC32 สี่ไบต์และตัวบ่งชี้ขนาดข้อมูลก่อนบีบอัดสี่ไบต์ ส่วน Raw DEFLATE เป็นบิตสตรีมตาม RFC 1951 ซึ่งไม่มีลายเซ็น ส่วนหัวจัดกรอบ หรือส่วนท้ายแบบตายตัว MIME type application/zlib หมายถึงตัวห่อหุ้ม zlib ตาม RFC 1950 รอบ DEFLATE ไม่ใช่สตรีม Raw DEFLATE การแปลง GZIP เป็น Raw DEFLATE จะนำข้อมูลเมตาและเช็คซัมของ GZIP ออก โดยคงเพย์โหลดที่บีบอัดไว้
ความเข้ากันได้ของระบบปฏิบัติการและเบราว์เซอร์
สตรีม Raw DEFLATE สามารถทำงานได้โดยตรงในระบบปฏิบัติการสมัยใหม่และรันไทม์ของเว็บผ่านภาษาโปรแกรมมาตรฐาน เช่น Python, Node.js และ C++ เบราว์เซอร์จัดการกับ DEFLATE ได้โดยตรงผ่านสแต็กส่วนหัว content-encoding ของ HTTP ระบบปฏิบัติการอย่าง Windows, macOS และ Linux รองรับสตรีมดิบผ่านไลบรารีการบีบอัดของระบบ เช่น zlib แพลตฟอร์มมือถือรวมถึง Android และ iOS มีการเข้าถึง API โดยตรงไปยังรูทีน DEFLATE สำหรับชั้นการจัดเก็บข้อมูลแอปแบบกำหนดเอง
เคล็ดลับการใช้งาน
ตรวจสอบให้แน่ใจเสมอว่าตัวแยกวิเคราะห์ปลายทางของคุณคาดหวังว่าจะเป็นสตรีม RFC 1951 ล้วนๆ แทนที่จะเป็นสตรีมที่ห่อด้วย zlib เนื่องจาก zlib จะเพิ่มส่วนหัวสองไบต์ที่ตัวแยกวิเคราะห์ Raw DEFLATE จะปฏิเสธ
คำถามที่พบบ่อย
จะแปลงสตรีม GZIP เป็น Raw DEFLATE โดยไม่สูญเสียคุณภาพได้อย่างไร
ทั้งสองรูปแบบใช้อัลกอริทึมการบีบอัดแบบไม่สูญเสียข้อมูลที่เหมือนกัน การแปลงรูปแบบเหล่านี้ทำได้ง่ายๆ เพียงอ่านคอนเทนเนอร์ GZIP ถอดส่วนหัวสิบไบต์และส่วนท้ายแปดไบต์ออก แล้วบันทึกบล็อกที่บีบอัดด้านใน ไม่มีข้อมูลสูญหายเนื่องจากอัลกอริทึมเบื้องต้นยังคงไม่เปลี่ยนแปลง
ความแตกต่างระหว่างสตรีม GZIP และ Raw DEFLATE คืออะไร
GZIP เป็นคอนเทนเนอร์ไฟล์ที่สมบูรณ์ซึ่งประกอบด้วยส่วนหัวลายเซ็นไฟล์ ชื่อไฟล์ต้นฉบับ ประทับเวลาการแก้ไข และส่วนท้ายผลรวมตรวจสอบ Raw DEFLATE เป็นเพียงข้อมูลที่บีบอัดเท่านั้น โดยไม่มีส่วนหัว ส่วนท้าย หรือข้อมูลเมตาของไฟล์