Подскажите пожалуйста, как настроить кеш браузера для статики и медиа в Django
вот справка гугла.. developers.google.com/speed/docs/insights/LeverageBrowserCaching
Я настроил кэширование фаловой системе по мануалу djbook.ru/rel1.8/topics/cache.html#filesystem-caching
т.е. добавил в настройки
CACHES = {
'default': {
'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache',
'LOCATION': '/var/tmp/django_cache',
}
}
и
MIDDLEWARE_CLASSES = (
'django.middleware.cache.UpdateCacheMiddleware',
....
'django.middleware.cache.FetchFromCacheMiddleware',
)
При загрузке страниц появился Expires в заголовке.
Но вот как сделать чтобы оно было для файлов из статики и из media, непонятно..
Ответ
Django не должен отвечать за установку хедеров статики. За это должен отвечать сервер который будет её обслуживать, например Nginx или Apache.
На локальной машине вашу ститику обслуживает сам django(скорее всего), но как и написано в мануале - это крайне неэффективно с точки зрения производительности.
Для ясности, картина работу выглядит так.
Приходит http запрос -> Nginx определяет тип запроса - если статика, то сам её отдает, если нет отдает далее стоящему приложению -> т.к Django общается с сервером по wsgi протоколу то саму django обслуживает (запускает) другое приложение, например uWSGI(uWSGI реализация wsgi протокола) -> запрос приходит в саму django. Ответ уходит по цепочке вверх. Теперь становится понятно почему это так неэффективно и почему django не должен этим заниматься.
Почитайте документацию Django Managing static files
Определитесь с тем - кто будет обслуживать статику на боевом сервере, и читайте в этом направлении.
Например настройка Nginx
Комментариев нет:
Отправить комментарий