CDN menghapus GZIP dan menghasilkan mojibake dalam nama file dan penegakan header charset yang memperbaiki unduhan yang rusak
Diterbitkan: 2025-11-21Ketika situs web berskala besar bergantung pada infrastruktur global untuk mengirimkan konten secara andal dan efisien, Jaringan Pengiriman Konten (CDN) memainkan peran penting. Selain menyimpan aset lebih dekat dengan pengguna, CDN juga membantu mengompresi file, mempercepat pengunduhan, dan meningkatkan pengalaman pengguna. Namun, dalam kondisi tertentu, hal tersebut secara tidak sengaja dapat menimbulkan masalah baru. Salah satu insiden tersebut adalah penanganan kompresi GZIP dan rangkaian karakter yang salah, yang menyebabkan download rusak dan mojibake (teks kacau) pada nama file — sebuah fenomena yang menantang pengembang dan operator.
TL;DR: Kesalahan konfigurasi dalam layanan CDN menyebabkannya menghapus header kompresi GZIP dari file yang dapat diunduh dan kesalahpahaman pengkodean karakter nama file. Hal ini mengakibatkan unduhan dengan nama file yang rusak atau tidak dapat dibaca (mojibake). Masalah ini akhirnya diselesaikan dengan memaksakan charset yang benar di header HTTP, memastikan bahwa pengkodean nama file dan konten ditafsirkan dengan benar oleh browser. Kasus ini menyoroti pentingnya konsistensi dalam pengkodean konten, terutama saat menggunakan CDN yang dapat mengubah header HTTP.
Apa yang Salah: Salah urus Kompresi
Inti permasalahannya adalah penanganan header Content-Encoding yang tidak tepat oleh CDN. Server asal mengompresi file dengan benar menggunakan GZIP dan memberi label dengan header berikut:
Content-Encoding: gzipNamun, CDN — yang dimaksudkan untuk mengoptimalkan pengiriman — memutuskan untuk menghapus header ini dan menyajikan konten seolah-olah tidak terkompresi. Ini berfungsi dengan baik untuk browser yang mengharapkan file mentah seperti CSS atau JavaScript, tetapi ketika pengguna mencoba mengunduh file seperti arsip CSV, PDF, atau ZIP, mereka menerima unduhan yang rusak. Membuka zip file tersebut akan gagal total atau menghasilkan data yang tampaknya tidak dapat dibaca atau tidak lengkap.
Selain kerusakan biner, masalah yang lebih misterius pun muncul: beberapa nama file tampak terdistorsi dengan simbol-simbol aneh, terutama saat diunduh menggunakan browser seperti Chrome atau Firefox. Fenomena ini dikenal sebagai mojibake , dan terjadi ketika sebuah program menafsirkan urutan byte menggunakan pengkodean karakter yang tidak diinginkan.
Kebingungan dalam Pengkodean Karakter
Mojibake dalam nama file yang diunduh biasanya terjadi ketika:
- Nama file berisi karakter non-ASCII (seperti huruf beraksen atau skrip Asia)
- Browser tidak mengetahui kumpulan karakter mana yang akan digunakan
- Header
Content-DispositionatauContent-Typetidak memiliki deklarasi rangkaian karakter yang tepat
Browser, karena salah menebak, mencoba menafsirkan nama file menggunakan pengkodean default atau fallback seperti ISO-8859-1, yang menyebabkan omong kosong menggantikan karakter yang dapat dibaca. Hal ini biasanya memengaruhi pengguna yang mengunduh file dengan nama file dalam bahasa seperti Jepang, Rusia, atau Jerman, yang banyak menggunakan karakter khusus.

Awalnya, pengembang telah menetapkan header yang sesuai dari server aplikasi, seperti:
Content-Type: application/octet-stream; charset=utf-8 Content-Disposition: attachment; filename="resume.pdf"Namun, sekali lagi, CDN mengubah header ini dengan menghapus atau menggantinya, sehingga menyebabkan download tanpa petunjuk charset. Hal ini memicu perilaku browser yang salah karena nama file ditafsirkan dengan pengkodean yang salah.
Cara Mengatasinya: Menerapkan Charset di Header HTTP
Setelah banyak proses debug dan penelusuran log, pengembang mengonfirmasi bahwa:
- File tidak rusak di server asal.
- Pengunduhan berhasil melalui curl dan akses IP langsung.
- Masalah ini hanya terjadi ketika dilayani melalui CDN.
Oleh karena itu, solusi yang tepat ada dua:
- Paksa CDN untuk mempertahankan header
Content-Encodingsehingga browser menerima dan mendekompresi konten GZIP dengan benar. - Tetapkan
charseteksplisit padaContent-Typedan dalam headerContent-Dispositionuntuk menjamin decoding nama file internasional yang tepat.
Konfigurasi header kerja terakhir terlihat seperti ini:

Content-Type: application/octet-stream; charset=utf-8 Content-Disposition: attachment; filename*=UTF-8''r%C3%A9sum%C3%A9.pdf Content-Encoding: gzip Penggunaan filename* dengan sintaks pengkodean URL UTF-8'' memastikan bahwa browser menafsirkan nama file sesuai dengan RFC 5987. Hal ini terutama didukung di browser modern, menyelaraskan perilaku lintas platform.
Mengapa CDN Mengubah Header
CDN sering kali bertujuan untuk mengoptimalkan kinerja, mengurangi redundansi, dan menstandardisasi respons. Untuk mencapai tujuan ini, mereka dapat:
- Hapus atau ganti arahan kompresi
- Normalisasi tipe konten
- Hapus header yang tidak lolos filter keamanan atau aturan cache
Namun, pengoptimalan ini dapat menjadi bumerang jika mengabaikan parameter penting yang ditetapkan dengan cermat untuk rendering konten atau pengunduhan file. Dalam kejadian ini, kegagalan CDN dalam mempertahankan Content-Encoding dan charset yang benar terbukti merugikan kegunaan dan internasionalisasi.

Pelajaran yang Dipetik
Masalah ini berfungsi sebagai pengingat berharga bagi pengembang yang bekerja di lingkungan terdistribusi:
- Selalu uji pengiriman konten secara menyeluruh. File yang berfungsi di server Anda mungkin berperilaku berbeda di belakang CDN.
- Bersikaplah eksplisit dalam header. Jangan berasumsi apa pun tentang perilaku default — selalu nyatakan tipe konten, pengkodean, dan rangkaian karakter.
- Kontrol perilaku CDN melalui konfigurasi. Kebanyakan CDN mengizinkan penggantian atau aturan untuk mempertahankan header. Manfaatkan mereka.
- Verifikasi perilaku pengunduhan di beberapa browser dan lokal. Bug internasionalisasi seringkali hanya muncul dalam kondisi seperti ini.
Pertanyaan Umum
Apa itu mojibake?
Mojibake adalah istilah yang digunakan untuk menggambarkan tampilan karakter yang kacau atau salah yang disebabkan oleh ketidakcocokan pengkodean karakter. Hal ini sering terjadi ketika perangkat lunak salah menafsirkan pengkodean karakter yang digunakan untuk menyimpan atau mengirim data teks.
Bagaimana gzip mempengaruhi pengunduhan file?
Jika digunakan dengan benar, GZIP akan mengompresi file untuk mengurangi waktu pengunduhan. Namun, jika file disajikan sebagai file terkompresi GZIP namun tidak memiliki header Content-Encoding: gzip yang sesuai, browser mungkin tidak mendekompresi file tersebut, sehingga menyebabkan download rusak atau tidak dapat dibaca.
Mengapa header strip CDN seperti Content-Encoding atau charset?
CDN memprioritaskan kinerja dan keamanan. Dalam melakukan hal ini, mereka sering kali menormalkan header atau menerapkan kebijakan yang menghapus informasi yang berpotensi tidak aman atau tidak diperlukan. Hal ini dapat secara tidak sengaja menghapus metadata penting yang diperlukan untuk penanganan konten yang benar.
Apa cara yang benar untuk menentukan nama file non-ASCII untuk diunduh?
Gunakan header Content-Disposition dengan atribut filename* menggunakan pengkodean UTF-8 dan format dengan persentase lolos, seperti yang ditentukan dalam RFC 5987. Misalnya:
Content-Disposition: attachment; filename*=UTF-8''r%C3%A9sum%C3%A9.pdf
Bagaimana cara pengembang menghindari masalah serupa di masa depan?
Mereka harus melakukan pengujian melalui lapisan CDN, menentukan header secara eksplisit, dan menggunakan konfigurasi CDN yang mempertahankan atau meneruskan semua metadata yang diperlukan. Selain itu, menjaga dokumentasi tentang bagaimana CDN mengubah lalu lintas sangat penting selama fase proses debug.
