Ответ 1
Прежде всего, я должен подчеркнуть, что вы должны сделать это на уровне веб-сервера (nginx или apache). Для этого есть несколько причин:
-
Производительность. Если вы делаете это на Python, вы используете один из своих потоков, который мог бы обрабатывать запросы для сжатия с высокой степенью сжатия. Это менее эффективно, чем позволяет оптимизировать веб-сервер.
-
Блокировка. Большинство связующих ПО GZip блокируют ваши ответы, буферизуя тело, чтобы он мог сжать весь ответ. Это проблема огромная, если вы пытаетесь передать какой-либо ответ клиенту, потому что он попадет в промежуточное программное обеспечение. Это фактически является нарушением PEP333, спецификации WSGI.
С учетом всего этого, возможно, имеет смысл сделать это в 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
).