2011-10-06 12 views
12

Come abilitare la compressione GZIP sul nuovo stack Heroku Cedar? Questo è direttamente dal loro site:Come abilitare la compressione gzip su Heroku Cedar (Python/Flask/Gunicorn)

Poiché le richieste per le applicazioni Cedar sono fatte direttamente al server delle applicazioni - non proxied attraverso un server HTTP come nginx - alcuna compressione delle risposte deve essere fatto all'interno della vostra applicazione. Per le app Rack, ciò può essere realizzato con il middleware Rack :: Deflater. Per le risorse statiche compresse con gzip, assicurati che Rack :: Deflater sia caricato prima di ActionDispatch :: Static nel tuo stack middleware.

Se sto leggendo questo correttamente, il mio codice applicazione Python è ora responsabile per gzipping delle risposte? Come faccio a comprimere le mie risorse statiche (ad esempio css/js)? Sto usando Flask e GUnicorn.

+1

Forse non sembra giusto ma sicuramente te lo stanno dicendo. Su python.org hai la documentazione relativa all'utilizzo di gzip: http://docs.python.org/library/gzip.html – gforcada

+0

stai solo sostenendo i diavoli qui - perché hai bisogno di usare gzip? Non stai pagando per la larghezza di banda in/out di Heroku, quindi perché la necessità di comprimere? –

+8

Ho bisogno di comprimere perché i miei utenti preferiranno caricare una pagina che pesa 300KB invece di 1MB! –

risposta

6

Hai solo bisogno di un middleware wsgi che gzips la risposta. Vedere Gzipping all HTTP traffic with Pyramid o http://librelist.com/browser//flask/2010/6/14/gzip-compression/

+0

Non sto usando Pyramid, come detto sopra. E quel link Flask non è un'implementazione completa. –

+1

Sia Pyramid che Flask sono basati su wsgi. Hai bisogno del middleware wsgi, non del middleware specifico per il pallone. –

+1

Ecco un altro http://code.google.com/p/ibkon-wsgi-gzip-middleware/source/browse/trunk/gzip_middleware.py e un altro http://www.evanfosmark.com/2008/12/python- wsgi-middleware-for-automatic-gzipping/Ancora, questo è wsgi middleware not flask, gunicorn o Pyramid. –

0

Secondo il WSGI spec, pubblicato del 2003, le applicazioni non dovrebbero gzip risposte, ma lasciare che al server (si presume essere Apache, in esecuzione l'applicazione CGI-stylee).

applicazioni e middleware non devono applicare alcun tipo di codifica di trasferimento ai loro output, come chunking o gzip; come operazioni "hop-by-hop", queste codifiche sono la provincia dell'attuale server web/gateway.

Ma oggi nel 2013, spesso l'app è il server. WSGI non ha previsto questo. Questo è un problema, secondo curiosa insistenza http://www.b-list.org/weblog/2009/aug/10/wsgi/

di WSGI sulla compatibilità con CGI significa anche che, qui nel 2009, il mondo web-sviluppo di Python non è ancora stato in grado di migliorare in modo significativo il modello di programmazione di applicazione del 1997.