2011-10-06 64 views
12

如何在新Heroku Cedar棧上啓用GZIP壓縮?這是直接從他們的site如何在Heroku Cedar上啓用gzip壓縮(Python/Flask/Gunicorn)

由於雪松的應用程序要求會直接傳送到應用服務器 - 反應的任何壓縮必須在應用程序內完成 - 通過像nginx的HTTP服務器不代理。對於Rack應用程序,這可以使用Rack :: Deflater中間件完成。對於壓縮的靜態資產,請確保Rack :: Deflater在中間件堆棧中的ActionDispatch :: Static之前加載。

如果我正確地閱讀這個,我的Python應用程序代碼現在負責gzip響應?我將如何去壓縮我的靜態資產(例如css/js)?我正在使用Flask和GUnicorn。

+1

也許它感覺不對,但肯定他們告訴你。在python.org上你有關於gzip使用的文檔:http://docs.python.org/library/gzip.html – gforcada

+0

這裏只是玩惡魔提倡 - 爲什麼你需要使用gzip?您不需要爲Heroku支付帶寬,因此爲什麼需要壓縮? –

+8

我需要壓縮,因爲我的用戶更願意加載一個重量爲300KB而不是1MB的頁面! –

回答

6
+0

我沒有使用金字塔,如上所述。而Flask鏈接不是一個完整的實現。 –

+1

金字塔和燒瓶都是基於wsgi的。您需要wsgi中間件,而不是特定於燒瓶的中間件。 –

+1

這是另一個http://code.google.com/p/ibkon-wsgi-gzip-middleware/source/browse/trunk/gzip_middleware.py和另一個http://www.evanfosmark.com/2008/12/python- wsgi-middleware-for-automatic-gzipping /再次,這是wsgi中間件而非燒瓶,gunicorn或金字塔。 –

0

按照WSGI spec,2003年版,應用程序應該是gzip答覆,但留給服務器(假定是Apache的,運行應用CGI-stylee)。

應用程序和中間件不得將任何類型的Transfer-Encoding應用於其輸出,例如分塊或gzip;作爲「逐跳」操作,這些編碼是實際Web服務器/網關的省份。

但今天在2013年,經常應用服務器。 WSGI沒有預料到這一點。這是一個問題,根據與CGI兼容性http://www.b-list.org/weblog/2009/aug/10/wsgi/

WSGI好奇的堅持也意味着,這裏在2009年,Python的網絡開發世界上還沒有能夠在1997年的應用程序編程模型顯著改善。