сжатый HTML-кэширование uWSGI - PullRequest
       5

сжатый HTML-кэширование uWSGI

0 голосов
/ 24 декабря 2018

Я следил за документацией uWSGI по кешированию , и у меня действительно странное поведение.Первый запрос поступает из моего приложения django, а второй - из кэша uWSGI.Проблема в том, что ответ от uWSGI сжимается после того, как html достигает определенного размера.

Я создал два представления django, чтобы проверить это:

def prime(request):
    from django.http import HttpResponse
    data = """<!doctype html>
<html lang="es">
<head>
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
</head>
</html>"""
    return HttpResponse(data)


def info(request):
    import zlib
    import uwsgi
    from django.http import HttpResponse
    resp = uwsgi.cache_keys()
    print(resp)
    decompressed_data = zlib.decompress(uwsgi.cache_get(b'/prime/'), 16 + zlib.MAX_WBITS)
    return HttpResponse(decompressed_data)

Я делаю запрос к / prime / , который заполняет кэш uWSGI.Следующий запрос - / info / , который правильно показывает кэшированный html.Без кода распаковки он просто распечатал бы байты сжатого ответа.Это проблема, потому что запрос / prime / из браузера вернет невоспроизводимый ответ.

Вот моя конфигурация uWSGI:

[uwsgi]
module = wsgi
http   = 0.0.0.0:80
master = true
workers = 3
max-requests = 500
harakiri = 120
lazy-apps = true
static-map = /static/=/static/
route=^/static/.* addheader:Cache-Control: public, max-age=3600

cache2 = name=html,items=100

; create a cache for images with dynamic size (images can be big, so do not waste memory)
cache2 = name=images,items=20,bitmap=1,blocks=100

; a cache for css (20k per-item is more than enough)
cache2 = name=stylesheets,items=30,blocksize=20000

; load the mime types engine
mime-file = /etc/mime.types

; at each request ending with .css check it in the 'stylesheets' cache
route = ^/static/css/(.+) cache:key=${REQUEST_URI},name=stylesheets,content_type=text/css

; at each request starting with /img check it in the 'images' cache (use mime types engine for the content type)
route = ^/static/img/(.+) cache:key=${REQUEST_URI},name=images,mime=1

route = .* cache:key=${REQUEST_URI},name=html,content_type=text/html

route = .* cachestore:key=${REQUEST_URI},name=html
route = ^/static/css/ cachestore:key=${REQUEST_URI},name=stylesheets
route = ^/static/img/ cachestore:key=${REQUEST_URI},name=images
...