Solución:
Antigua pregunta, pero estaba buscando esto y fue el primer resultado en Google. El enlace a la respuesta de Leon tiene una solución no para Flask y además es antiguo. Con Python 3 ahora podemos hacer todo en pocas líneas con las bibliotecas estándar (y Flask):
from flask import make_response, json
import gzip
@app.route('/data.json')
def compress():
very_long_content = [{'a': 1, 'b': 2}, {'c': 3, 'd': 4}]
content = gzip.compress(json.dumps(very_long_content).encode('utf8'), 5)
response = make_response(content)
response.headers['Content-length'] = len(content)
response.headers['Content-Encoding'] = 'gzip'
return response
Con gzip.compress tenemos directamente una cadena de bytes comprimida y se requiere como entrada una cadena de bytes. Luego, como el enlace de Leon, hacemos una respuesta personalizada diciendo que el contenido es un gzip para que el navegador se descomprima por sí mismo.
Para decodificar en Javascript usando una solicitud ajax de JQuery, no hay ninguna diferencia particular con una solicitud estándar:
$.ajax({
url: '/data.json',
dataType: 'json',
success: function(data) {
console.log(data);
}
})
Tenga en cuenta que este fragmento comprime y luego envía el contenido largo. Debe considerar la cantidad de tiempo que lleva comprimir el contenido (especialmente en este caso que tenemos contenido muy extenso), así que asegúrese de establecer un nivel apropiado de compresión que no requiera más tiempo para comprimir + enviar que para enviar. el contenido largo tal como está.
Mi caso de uso fue que envié el contenido grande desde una conexión lenta, por lo que tuve todos los beneficios para comprimir el contenido antes de enviarlo.
Las solicitudes web son compatibles con GZip y puede implementarlo en Python.
Aquí hay alguien que hizo esa pregunta exacta. Cómo utilizar Content-Encoding: gzip con Python SimpleHTTPServer
Según el repositorio de flask-compress
La solución preferida es tener un servidor (como Nginx) que comprima automáticamente los archivos estáticos por usted.
Pero puedes hacerlo en matraz: https://github.com/colour-science/flask-compress.
Si sigue la ruta gzip, no necesitará eliminar los saltos de línea y los espacios en blanco, pero si aún así lo desea, de acuerdo con la documentación del matraz, puede deshabilitar la impresión bonita configurando JSONIFY_PRETTYPRINT_REGULAR en falso.