Обслуживание gzipped содержание от django

Если для параметра «Тип конфигурации» («Свойства конфигурации» -> «Основные» -> «Тип конфигурации») выбрано значение «Утилита», опция компоновщика будет недоступна.

39
задан pjbeardsley 8 June 2009 в 12:55
поделиться

2 ответа

zlib слишком низкоуровневый для этой цели. Вот как это делает само промежуточное ПО GZip (см. Compress_string в django.utils.text.py ):

import cStringIO, gzip
zbuf = cStringIO.StringIO()
zfile = gzip.GzipFile(mode='wb', compresslevel=6, fileobj=zbuf)
zfile.write(template.render(context).encode('utf-8'))
zfile.close()

compressed_content = zbuf.getvalue()
response = HttpResponse(compressed_content)
response['Content-Encoding'] = 'gzip'
response['Content-Length'] = str(len(compressed_content))
return response

GZip использует zlib, но сам по себе zlib создает контент, который неправильно закодирован для браузера, который видит 'gzip 'в качестве кодировки содержимого. Надеюсь, это поможет!

24
ответ дан 27 November 2019 в 02:04
поделиться

Вы также можете просто использовать Промежуточное ПО GZip Django :

Либо включив промежуточное ПО в settings.py, добавив:

MIDDLEWARE_CLASSES = (
    django.middleware.gzip.GZipMiddleware,
    ...
)

, либо сделайте это перед тем, как вернуть особый ответ. В вашем views.py dec будет обработчиком определенного url

from django.middleware.gzip import GZipMiddleware

gzip_middleware = GZipMiddleware()

 def dec(request, *args, **kwargs):
        response = func(request, *args, **kwargs)
        return gzip_middleware.process_response(request, response)
        return dec

ПРИМЕЧАНИЕ: вы должны быть уверены , что не подвергаетесь атакам по сторонним каналам, прежде чем использовать промежуточное ПО GZip.

Предупреждение

Исследователи безопасности недавно обнаружили, что при сжатии методы (включая GZipMiddleware) используются на веб-сайте, сайт могут подвергнуться ряду возможных атак. Перед использованием GZipMiddleware на вашем сайте, вы должны очень внимательно рассмотреть подвержены ли вы этим атакам. Если у вас есть сомнения по поводу независимо от того, пострадали ли вы, вам следует избегать использования GZipMiddleware. За подробнее см. документ BREACH (PDF) и breachattack.com.

Также:

Изменено в Django 1.10: В более старых версиях защита Django от CSRF механизм был уязвим для атак BREACH при использовании сжатия. Это уже не так, но вы все равно должны таким образом скомпрометируйте свои секреты.

86
ответ дан 27 November 2019 в 02:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: