使用金字塔gzip压缩所有HTTP流量

2024-05-23 17:28:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在创建一个基于金字塔框架的移动服务。因为它是移动的一切,以减少带宽使用是有利的。我正在考虑gzip所有的流量,甚至动态HTML页面。在

金字塔框架提供了什么样的钩子?或者是否有针对该任务的WSGI中间件?我希望仍然在Python级别,而不是Nginx/Apache,这样我就可以更好地统计gzip带来了多少好处。在


Tags: 中间件框架wsgiapachehtmlnginx动态页面
3条回答

首先,我要强调的是,您应该在web服务器级别(nginx或apache)上这样做。这有几个原因:

  1. 性能-如果你用Python来做这件事,你就在使用一个可以处理请求的线程来进行cpu密集型的压缩。这比允许优化的web服务器处理它的效率要低得多。

  2. 阻塞-大多数GZip中间件将阻塞您的响应,缓冲主体,以便它可以压缩整个响应。如果您试图将任何响应流式传输回客户机,这是一个巨大的问题,因为它会被中间件捕获。这实际上违反了WSGI规范PEP333。

考虑到所有这些,使用Python进行测试可能是有意义的,至少在开发过程中出于调试目的。在

因为你已经在使用金字塔,所以你已经安装了粘贴。因此,您只需将paste.gzipper.GzipMiddleware添加到应用程序的管道中,如下所示:

[filter:gzip]
use = egg:Paste#gzip
compress_level = 6

[pipeline:main]
pipeline =
    gzip
    app

显然,如果您不想将压缩级别从默认值6更改为,您可以简单地将egg:Paste#gzip添加到管道中,而不是配置过滤器并给它一个自定义名称(gzip)。在

您仍然可以使用Apache获得每个请求的压缩统计信息。我创造了一个放气.log是这样的:

DeflateFilterNote Input instream
DeflateFilterNote Output outstream
DeflateFilterNote Ratio ratio
LogFormat '%a %v %{outstream}n/%{instream}n (%{ratio}n%%) "%r"' deflate
CustomLog /var/log/httpd/deflate.log deflate

现在我得到的日志条目如下:

^{pr2}$

我可以尽情分析。在

相关问题 更多 >