我正在创建一个基于 Pyramid 框架的移动服务。因为它是移动的,所以减少带宽使用的一切都是有利的。我正在考虑压缩所有流量,甚至是动态 HTML 页面。
Pyramid 框架为此提供了什么样的钩子(Hook)?或者是否有用于该任务的 WSGI 中间件?我仍然想在 Python 级别而不是 Nginx/Apache 上执行此操作,因此我可以更好地统计 gzip 带来了多少好处。
最佳答案
首先,我要强调的是,您应该在 Web 服务器级别(nginx 或 apache)执行此操作。这有几个原因:
性能 - 如果您在 Python 中执行此操作,您正在使用您的线程之一,该线程可能正在处理执行 cpu 密集型压缩的请求。这比让优化的网络服务器处理它的效率要低得多。
阻塞 - 大多数 GZip 中间件会阻塞您的响应,缓冲正文以便它可以压缩整个响应。如果您试图将任何响应流式传输回客户端,这是一个巨大的问题,因为它会被中间件捕获。这实际上违反了 WSGI 规范 PEP333。
考虑到所有这些,至少出于开发期间的调试目的,在 Python 中执行此操作可能是有意义的。
因为您已经在使用 Pyramid,所以您已经安装了 Paste。因此,您可以像这样简单地将 paste.gzipper.GzipMiddleware
添加到应用程序的管道中:
[filter:gzip]
use = egg:Paste#gzip
compress_level = 6
[pipeline:main]
pipeline =
gzip
app
显然,如果您不想更改默认的压缩级别 6,您可以简单地将 egg:Paste#gzip
添加到管道中,而不是配置过滤器并给它一个自定义名称 (gzip
)。
关于python - 使用 Pyramid 压缩所有 HTTP 流量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6618985/