Un CDN ha rimosso GZIP e prodotto mojibake nei nomi dei file e l'applicazione dell'intestazione del set di caratteri che ha corretto i download corrotti
Pubblicato: 2025-11-21Quando i siti Web su larga scala si affidano a un'infrastruttura globale per fornire contenuti in modo affidabile ed efficiente, le reti per la distribuzione di contenuti (CDN) svolgono un ruolo fondamentale. Oltre a memorizzare semplicemente nella cache le risorse più vicine agli utenti, le CDN aiutano anche a comprimere file, accelerare i download e migliorare l'esperienza dell'utente. Tuttavia, in determinate condizioni, possono inavvertitamente introdurre nuovi problemi. Uno di questi incidenti ha comportato una gestione errata della compressione GZIP e dei set di caratteri, con conseguenti download corrotti e mojibake (testo confuso) nei nomi dei file: un fenomeno che ha messo a dura prova sia gli sviluppatori che gli operatori.
TL;DR: un'errata configurazione in un servizio CDN ha portato alla rimozione delle intestazioni di compressione GZIP dai file scaricabili e all'incomprensione della codifica dei caratteri dei nomi dei file. Ciò ha comportato download con nomi di file danneggiati o illeggibili (mojibake). Il problema è stato infine risolto forzando il charset corretto nelle intestazioni HTTP, garantendo che sia la codifica del nome file che il contenuto fossero interpretati correttamente dal browser. Questo caso evidenzia l'importanza della coerenza nella codifica dei contenuti, soprattutto quando si utilizzano CDN che possono modificare le intestazioni HTTP.
Cosa è andato storto: cattiva gestione della compressione
Al centro del problema c'era la gestione inappropriata dell'intestazione Content-Encoding da parte della CDN. Il server di origine ha compresso correttamente i file utilizzando GZIP e li ha etichettati con la seguente intestazione:
Content-Encoding: gzipTuttavia, il CDN, con l’obiettivo di ottimizzare la consegna, ha deciso di eliminare questa intestazione e fornire il contenuto come se non fosse compresso. Funzionava bene per i browser che prevedevano file non elaborati come CSS o JavaScript, ma quando gli utenti provavano a scaricare file come CSV, PDF o archivi ZIP, ricevevano download danneggiati. La decompressione di tali file non è riuscita completamente o ha prodotto dati che sembravano illeggibili o incompleti.
Oltre alla corruzione binaria, è emerso un problema ancora più misterioso: alcuni nomi di file apparivano distorti con strani simboli, in particolare se scaricati utilizzando browser come Chrome o Firefox. Questo fenomeno è noto come mojibake e si verifica quando un programma interpreta una sequenza di byte utilizzando una codifica di caratteri non intenzionale.
Confusione nelle codifiche dei caratteri
Mojibake nei nomi dei file scaricati si verifica in genere quando:
- Il nome del file contiene caratteri non ASCII (come lettere accentate o caratteri asiatici)
- Il browser non sa quale set di caratteri utilizzare
- Le intestazioni
Content-DispositionoContent-Typemancano di dichiarazioni di set di caratteri adeguate
Il browser, sbagliando a indovinare, tenta di interpretare il nome del file utilizzando una codifica predefinita o di fallback come ISO-8859-1, producendo parole senza senso al posto di caratteri leggibili. Questo di solito colpisce gli utenti che scaricano file con nomi in lingue come giapponese, russo o tedesco, dove prevalgono i caratteri speciali.

Originariamente, gli sviluppatori avevano impostato le intestazioni appropriate dal server delle applicazioni, come ad esempio:
Content-Type: application/octet-stream; charset=utf-8 Content-Disposition: attachment; filename="resume.pdf"Ma, ancora una volta, la CDN ha modificato queste intestazioni rimuovendole o sostituendole, portando a download senza il suggerimento del set di caratteri. Ciò ha innescato un comportamento errato del browser poiché il nome del file è stato interpretato con la codifica errata.
La soluzione: applicare il set di caratteri nelle intestazioni HTTP
Dopo molto debugging e tracciamento dei log, gli sviluppatori hanno confermato che:
- I file non sono stati danneggiati nel server di origine.
- I download hanno avuto esito positivo tramite curl e accesso IP diretto.
- Il problema si verificava solo quando veniva servito tramite la CDN.
Pertanto, la soluzione corretta era duplice:
- Forza la CDN a preservare le intestazioni
Content-Encodingin modo che i browser ricevano e decomprimano correttamente i contenuti GZIP. - Imposta un set
charsetesplicito sia sulle intestazioniContent-Typeche all'interno delle intestazioniContent-Dispositionper garantire la corretta decodifica internazionale dei nomi file.
La configurazione finale dell'intestazione funzionante era simile alla seguente:

Content-Type: application/octet-stream; charset=utf-8 Content-Disposition: attachment; filename*=UTF-8''r%C3%A9sum%C3%A9.pdf Content-Encoding: gzip L'uso di filename* con la sintassi di codifica URL UTF-8'' garantisce che i browser interpretino il nome file secondo RFC 5987. Ciò è particolarmente supportato nei browser moderni, allineando il comportamento multipiattaforma.
Perché i CDN alterano le intestazioni
Le CDN spesso mirano a ottimizzare le prestazioni, ridurre la ridondanza e standardizzare le risposte. A tal fine potranno:
- Elimina o sostituisci le direttive di compressione
- Normalizza i tipi di contenuto
- Rimuovi le intestazioni che non superano i filtri di sicurezza o le regole di memorizzazione nella cache
Tuttavia, queste ottimizzazioni possono rivelarsi controproducenti quando sovrascrivono i parametri attentamente impostati, critici per il rendering dei contenuti o il download dei file. In questo incidente, l'incapacità della CDN di preservare la Content-Encoding e charset corretti si è rivelata dannosa sia per l'usabilità che per l'internazionalizzazione.

Lezioni apprese
Questo problema funge da prezioso promemoria per gli sviluppatori che lavorano in ambienti distribuiti:
- Testa sempre la distribuzione dei contenuti end-to-end. I file che funzionano sul tuo server potrebbero comportarsi diversamente dietro una CDN.
- Sii esplicito nelle intestazioni. Non dare per scontato nulla sui comportamenti predefiniti: dichiara sempre il tipo di contenuto, la codifica e il set di caratteri.
- Controlla il comportamento della CDN tramite la configurazione. La maggior parte dei CDN consente sostituzioni o regole per preservare le intestazioni. Utilizzateli.
- Verifica il comportamento del download in più browser e impostazioni locali. I bug dell’internazionalizzazione spesso compaiono solo in queste condizioni.
Domande frequenti
Cos'è il mojibake?
Mojibake è un termine usato per descrivere la visualizzazione confusa o errata dei caratteri causata da mancate corrispondenze nella codifica dei caratteri. Si verifica spesso quando il software interpreta erroneamente la codifica dei caratteri utilizzata per archiviare o inviare dati di testo.
In che modo gzip influisce sui download dei file?
Se utilizzato correttamente, GZIP comprime i file per ridurre i tempi di download. Tuttavia, se un file viene fornito come compresso GZIP senza l'appropriata Content-Encoding: gzip , i browser potrebbero non decomprimerlo, causando download danneggiati o illeggibili.
Perché un CDN dovrebbe rimuovere intestazioni come Content-Encoding o charset?
Le CDN danno priorità alle prestazioni e alla sicurezza. In tal modo, spesso normalizzano le intestazioni o applicano policy che rimuovono informazioni potenzialmente non sicure o non necessarie. Ciò può rimuovere inavvertitamente i metadati critici necessari per la corretta gestione dei contenuti.
Qual è il modo corretto per specificare nomi di file non ASCII per i download?
Utilizza l'intestazione Content-Disposition con l'attributo filename* utilizzando la codifica UTF-8 e il formato con escape percentuale, come specificato nella RFC 5987. Ad esempio:
Content-Disposition: attachment; filename*=UTF-8''r%C3%A9sum%C3%A9.pdf
Come possono gli sviluppatori evitare tali problemi in futuro?
Dovrebbero condurre test attraverso il livello CDN, specificare le intestazioni in modo esplicito e utilizzare configurazioni CDN che preservino o passino attraverso tutti i metadati richiesti. Inoltre, tenere aggiornata la documentazione su come i CDN alterano il traffico è essenziale durante le fasi di debug.
