如何在新的Heroku Cedar堆栈上启用GZIP压缩?这是他们的site:
由于对Cedar应用程序的请求直接发送到应用程序服务器 - 不通过像nginx这样的HTTP服务器代理 - 任何响应压缩都必须在您的应用程序中完成。对于Rack应用程序,可以使用Rack :: Deflater中间件来完成。对于gzip压缩的静态资源,请确保在中间件堆栈中的ActionDispatch :: Static之前加载Rack :: Deflater。
如果我正确读取此内容,我的Python应用程序代码现在负责gzipping响应?我将如何压缩我的静态资产(例如css / js)?我正在使用Flask和GUnicorn。
答案 0 :(得分:6)
你只需要一个wsgi中间件来gzips响应。请参阅Gzipping all HTTP traffic with Pyramid或http://librelist.com/browser//flask/2010/6/14/gzip-compression/
答案 1 :(得分:1)
根据2003年发布的WSGI spec,应用程序不应该将响应留给服务器(假设是Apache,运行应用程序CGI样式)。
应用程序和中间件不得对其输出应用任何类型的Transfer-Encoding,例如分块或gzipping;作为“逐跳”操作,这些编码是实际Web服务器/网关的范围。
但是今天在2013年,应用通常是服务器。 WSGI没有预料到这一点。根据{{3}}
,这是一个问题WSGI对与CGI兼容性的强烈坚持也意味着,在2009年,Python Web开发世界仍未能显着改进1997年的应用程序编程模型。