python - 使用 Pyramid 压缩所有 HTTP 流量

标签 python http gzip pyramid

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

Pyramid 框架为此提供了什么样的钩子(Hook)?或者是否有用于该任务的 WSGI 中间件?我仍然想在 Python 级别而不是 Nginx/Apache 上执行此操作,因此我可以更好地统计 gzip 带来了多少好处。

最佳答案

首先,我要强调的是,您应该在 Web 服务器级别(nginx 或 apache)执行此操作。这有几个原因:

  1. 性能 - 如果您在 Python 中执行此操作,您正在使用您的线程之一,该线程可能正在处理执行 cpu 密集型压缩的请求。这比让优化的网络服务器处理它的效率要低得多。

  2. 阻塞 - 大多数 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/

相关文章:

python - 如何在不查看 Python 扩展名的情况下检查文件是否存在?

http - 需要将旧 URL 重定向到新 URL 的建议

php - 内部重定向对客户端 php 可见

image - 如何将 .nii 转换为 .nii.gz 文件?

hadoop - 如何使用 LZO 以外的压缩处理 Hadoop Map/Reduce 中的 Protocol Buffer 文件?

java - 套接字使用的 GZIPOutputStream 长度

python - 从具有多个数据集的散点图中获取 x,y?

python - python中的分割线

python - 如何更快地启动 PyCharm?

php - PayPal IPN 沙箱返回 HTTP 302