tools.gzip не сжимает содержимое в cherrypy - PullRequest
3 голосов
/ 10 июня 2011

Я проверяю свой сайт разработки с помощью инструмента Yslow в Chrome и Firefox, и одно из предложений заключается в том, чтобы я распаковывал соответствующий контент.В качестве отправной точки я просто добавил "tools.gzip.on = True" в мою конфигурацию [/].Я знаю, что файл конфигурации и блок анализируются правильно, потому что я также добавил опции для отключения кэширования в заголовках ответов, так как я часто меняю файлы при разработке сайта.Я вижу заголовки «Expires» и «Pragma: no-cache» в моих ответах.

По какой-то причине, даже после изменения файла конфигурации (и перезапуска процесса, который не является строго обязательным), Yslowдо сих пор сообщает, что я не использую gzip.Я также использовал wget и не вижу заголовка Content-Encoding.

Может кто-нибудь подсказать, как еще я могу проверить, что происходит?Я задаюсь вопросом, заключается ли проблема в том, что вишня игнорирует настройку gzip или Yslow просто ошибается в своих фактах.У меня никогда не было проблем с Yslow прежде, поэтому я склоняюсь к первому.

Я добавлю, что Yslow только сообщает, что мои внешние файлы CSS и JavaScript (обслуживаемые тем же процессом cherrypy) должны бытьсжатый, хотя заголовки, показанные как "wget ​​-S", не показывают кодировку gzip даже на самой главной странице (которая является динамическим содержимым).

Я попытался добавить "tools.gzip.on =Верно "для моих блоков [/ css] и [/ js], и я также попытался установить" tools.encode.on = True "во всех одних и тех же блоках, полагая, что для работы gzip должно быть включено кодирование.

Заранее спасибо.

Ответы [ 2 ]

9 голосов
/ 11 июня 2011

Строка документации 3.2 для cherrypy.lib.gzip:

def gzip(compress_level=5, mime_types=['text/html', 'text/plain'], debug=False):
    """Try to gzip the response body if Content-Type in mime_types.

    cherrypy.response.headers['Content-Type'] must be set to one of the
    values in the mime_types arg before calling this function.

    The provided list of mime-types must be of one of the following form:
        * type/subtype
        * type/*
        * type/*+subtype

    No compression is performed if any of the following hold:
        * The client sends no Accept-Encoding request header
        * No 'gzip' or 'x-gzip' is present in the Accept-Encoding header
        * No 'gzip' or 'x-gzip' with a qvalue > 0 is present
        * The 'identity' value is given with a qvalue > 0.

    """

Мои деньги относятся к типу MIME, поскольку вы упоминаете JS и CSS. Вы можете изменить это следующим образом:

[/static]
tools.gzip.mime_types: ['text/html', 'text/plain', 'text/javascript', 'text/css']

В CherryPy 3.2+ вы можете сократить это до:

[/static]
tools.gzip.mime_types: ['text/*']
1 голос
/ 30 июня 2016

Чтобы сделать это для Javascript, мне также пришлось включить 'application / *' в качестве mime_type.

Соответствующая часть моей конфигурации выглядит следующим образом:

'tools.gzip.on': True,    
'tools.gzip.mime_types': ['text/*', 'application/*'],
...