Подтвердить что ты не робот

Gzipping весь HTTP-трафик с помощью Pyramid

Я создаю мобильную службу на основе структуры Pyramid. Потому что это мобильное все, чтобы уменьшить использование полосы пропускания плюс. Я рассматриваю gzipping весь трафик, даже динамические HTML-страницы.

Какого рода крючки для этой платформы? Или существует ли связующее ПО WSGI для выполнения этой задачи? Я бы хотел сделать это еще на уровне Python, а не Nginx/Apache, поэтому я могу лучше узнать, сколько gzip приносит пользу.

4b9b3361

Ответ 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).

Ответ 2

Вы по-прежнему можете получать статистику сжатия по запросу с помощью 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

Теперь я получаю записи журнала, например:

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"

что я могу проанализировать свое сердечное содержание.