14

如何在新的 Heroku Cedar 堆栈上启用 GZIP 压缩?这直接来自他们的网站

由于对 Cedar 应用程序的请求是直接向应用程序服务器发出的——而不是通过像 nginx 这样的 HTTP 服务器代理——任何响应的压缩都必须在你的应用程序中完成。对于 Rack 应用程序,这可以通过 Rack::Deflater 中间件来完成。对于压缩的静态资源,请确保 Rack::Deflater 在中间件堆栈中的 ActionDispatch::Static 之前加载。

如果我没看错,我的 Python 应用程序代码现在负责压缩响应吗?我将如何压缩我的静态资产(例如 css/js)?我正在使用 Flask 和 GUnicorn。

4

2 回答 2

7

您只需要一个 gzip 响应的 wsgi 中间件。请参阅使用 Pyramid 压缩所有 HTTP 流量http://librelist.com/browser//flask/2010/6/14/gzip-compression/

于 2011-10-21T16:35:19.477 回答
1

根据 2003 年发布的WSGI 规范,应用程序不应 gzip 响应,而是将其留给服务器(假定是 Apache,运行应用程序 CGI-stylee)。

应用程序和中间件不得对其输出应用任何类型的传输编码,例如分块或 gzipping;作为“逐跳”操作,这些编码是实际 Web 服务器/网关的范围。

但在 2013 年的今天,应用程序通常服务器。WSGI 没有预料到这一点。这是一个问题,根据http://www.b-list.org/weblog/2009/aug/10/wsgi/

WSGI 对与 CGI 兼容的奇怪坚持也意味着,在 2009 年,Python Web 开发世界仍然无法显着改进 1997 年的应用程序编程模型。

于 2013-07-28T18:34:48.067 回答