Я следил за документацией 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