2011-10-06 63 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年的应用程序编程模型显著改善。