Кэширование Django для каждого сайта и Vary: Cache - PullRequest
2 голосов
/ 28 ноября 2011

Я заметил, что мое кэширование на сайте не работает, потому что заголовки ответа страницы включают в себя:

Vary:Cookie

Поскольку у меня установлена ​​аналитика Google, он будет обновлять cookie при каждой загрузке страницы, что сделает кэш непригодным для использования.

Я не уверен, добавил ли я Vary: Cookie в заголовки ответа страницы неявно или откуда он появился.Любая помощь приветствуется.

Django 1.3.1

ОБНОВЛЕНИЕ:

получается, что когда включено промежуточное ПО session и доступ к session, он будетдобавить Vary:Cookie заголовок к ответу.В моем случае причина в том, что стороннее приложение получает доступ к сеансу.

1 Ответ

4 голосов
/ 02 февраля 2012

Вопрос на самом деле не сформулирован как вопрос :), но я подумал, что хотел бы отметить несколько вещей.

Кэш Django по умолчанию не чувствителен к cookie-файлам .Но вы можете сказать ему об этом, установив vary_on_* декораторов.

Это означает, что кеш для сайта, о котором вы говорите, это нечто другое - вы упомянули Google Analytics, хотя не совсем понятно, как это связано.это кеширование самого себя.

Таким образом, у вас (?) есть некоторое кэширование.

Если вы собираетесь использовать nginx или лак , вы можете настроить способ воздействия vary на кэш, а с помощью nginx вы также можете удалить его из ответа, чтобы клиент не получил его (включая аналитику Google).

Если вы просто хотите, чтобы javascript не видел cookie-файлы сеанса, есть определенный параметр: SESSION_COOKIE_HTTPONLY.

У вас должна быть стратегия для каждого URL-адреса, в которой вы настраиваете поведение кэша для страниц, которыезависеть или нет от пользователя, вошедшего в систему, используя или игнорируя заголовки Vary и Expire.

[edit]

, используя Nginx для кэширования

Если вы используете nginx в качестве фронтэндаd и вы хотите кешировать его, есть очень простой способ принудительного кеширования для представлений, где файлы cookie не нужны, используя :

location /yourpath/ {
    proxy_cache cache_name;
    proxy_ignore_headers Set-Cookie;
    proxy_cache_valid 200 1d; # how long the nginx cache will last
    proxy_cache_key "$host$request_uri$cookie_user"; # you can still use /one/ cookie for your cache!

    ...
    proxy_pass @namedlocation;
}

, вам потребуется определить кеш, для болееизвлечение информации: https://serverfault.com/questions/30705/how-to-set-up-nginx-as-a-caching-reverse-proxy

С uwsgi применяются очень похожие настройки, только они имеют префикс uwsgi;Извлеките uwsgi doc , но, учитывая, что он менее многословен, чем документ "proxy", я начал с этого в качестве примера.

Если вы хотите полностью "удалить" куки, вы можете:

location /path/ {
    proxy_hide_header Set-Cookie;
}

но я не уверен, что это то, что вы хотите сделать!

С другой стороны, если вы хотите лучше контролировать кеш браузера, вы можете переустановить переменнуюзаголовок, как вы хотите:

location /path/ {
    proxy_hide_header Vary;
}

, и вы даже можете сбросить его на что-то другое:

    add_header    Vary User-Agent;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...