Mic*_*kel 24
首先,我要强调你应该在Web服务器级别(nginx或apache)上执行此操作.有几个原因:
性能 - 如果你在Python中执行此操作,那么您正在使用一个可以处理请求进行cpu密集压缩的线程.这比允许优化的Web服务器处理它的效率低.
阻止 - 大多数GZip中间件会阻止你的响应,缓冲身体,以便它可以压缩整个响应.如果您尝试将任何响应流回客户端,这是一个很大的问题,因为它会被中间件捕获.这实际上违反了WSGI规范PEP333.
考虑到所有这些因素,在Python中进行此操作至少在开发期间进行调试可能是有意义的.
由于您已经在使用金字塔,因此您已安装了粘贴.因此,您可以简单地将其添加paste.gzipper.GzipMiddleware到应用程序的管道中,如下所示:
[filter:gzip]
use = egg:Paste#gzip
compress_level = 6
[pipeline:main]
pipeline =
gzip
app
Run Code Online (Sandbox Code Playgroud)
显然,如果您不想将压缩级别从默认值6更改,您只需将egg:Paste#gzip管道添加到管道中,而不是配置过滤器并为其提供自定义名称(gzip).
您仍然可以使用Apache获得每请求压缩统计信息.我创建了一个deflate.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
Run Code Online (Sandbox Code Playgroud)
现在我得到如下日志条目:
ip domain -/- (-%) "GET /wp-content/uploads/2010/03/favicon.ico HTTP/1.1"
ip domain 10995/52406 (20%) "GET /2006/07/19/ HTTP/1.0"
ip domain 1873/7891 (23%) "POST /registration/regForm HTTP/1.1"
Run Code Online (Sandbox Code Playgroud)
我可以分析我心中的内容.