Estoy completamente confundido por gzipping...
Situación:
Al principio pensé que necesitaba una biblioteca como Pako , pero luego leí que los navegadores la admiten de forma nativa .
{ "this-is-a": "simple-json" } 1f8b 0800 0000 0000 0013 abe6 5200 02a5 928c cc62 5d20 4a54 b252 502a cecc 2dc8 49d5 cd2a cecf 53e2 aa05 00f2 869a 6022 0000 00 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> </head> <body> <script> fetchGzippedData('./example.json.gz') function fetchGzippedData(url){ fetch(url).then(function (response) { return response.json() }) .then(function (json) { console.log(json); }) .catch(function(err) { console.error('Error loading file') }); } </script> </body> </html>Lo extraño es que no funciona en localhost (usando el servicio o con la vista previa de Astro ). Tampoco funciona en mi servidor personal, pero sí en el servidor de mi cliente.
Así que supongo que tiene que ver con la configuración del servidor (con la que no tengo experiencia)... pero ¿por qué no funciona en localhost?
Ok, finalmente lo descubrí.
Falla porque la codificación de contenido del encabezado de respuesta del archivo .gz es incorrecta o falta.
(Esta información se puede ver para el archivo respectivo en la pestaña Red en las herramientas de depuración del navegador).
Tiene que estar configurado en Content-Encoding : gzip
Una vez que es correcto, puede buscar y analizar el archivo json como si no estuviera comprimido con gzip.
Para el servicio de servidor de sitio estático que estoy usando, puede establecer opciones a través de un servicio.json :
(Pero también vi información similar para Apache )
{ "headers": [ { "source" : "**/*.@(gz|gzip)", "headers" : [{ "key" : "Content-Encoding", "value" : "gzip" }] } ] }Nota al margen: me di cuenta de que si accede directamente al archivo .gz a través del navegador: