Как сделать лак игнорировать, не удалять файлы cookie [закрыто

StackOverflow https://stackoverflow.com/questions/4273734

  •  28-09-2019
  •  | 
  •  

Вопрос

Я хочу использовать лак для кэширования определенных страниц даже в присутствии куки. Есть 3 возможности, которые мне нужно позаботиться:

  1. Аноним пользователь просмотр какая-то страницы
  2. Зарегистрированный пользователь просматривает некоторую страницу с настройкой освещенности. Эти настраивания все хранятся в подписанном файле cookie и динамически заполнены JavaScript. HTTP-заголовок Vary-Cookie не установлен.
  3. Зарегистрированный пользователь просмотр какая-то страницы с помощью индивидуальных данных из базы данных. Установлен заголовок HTTP Vary-Cookie Cookie.

Ожидаемое поведение было бы:

  1. Кэш страницы. Это самый простой сценарий для лака для обработки.
  2. Кэшируйте страницу и не удаляйте файл cookie, потому что некоторые нуждаются в логике JavaScript.
  3. Никогда не кэшируйте эту страницу, потому что Vary-cookie сигнализирует, что содержимое cookie повлияет на вывод этой страницы.

Я прочитал некоторые документы на лаком, и я не могу сказать, если это поведение по умолчанию или если есть некоторая настройка, которую я должен сделать в VCL, чтобы сделать это.

Это было полезно?

Решение

Только сеансы уникальны для каждого клиента, не обязательно файлы cookie.

То, что вы хотите, имеет смысл и можно с лаком, это просто вопрос тщательно создания вашего собственного VCL. Пожалуйста, обратите внимание на следующие части значения default.vcl:

sub vcl_recv {
    ...
    if (req.http.Authorization || req.http.Cookie) {
      /* Not cacheable by default */
      return (pass);
    }
}


sub vcl_hit {
    if (!obj.cacheable) {
        return (pass);
    }
    ...
}


sub vcl_fetch {
    if (!beresp.cacheable) {
        return (pass);
    }
    if (beresp.http.Set-Cookie) {
        return (pass);
    }
    ...
}

Вы должны заменить эти части своей собственной логикой; Т.е. определите свои собственные функции VCL_. По умолчанию запросы (vcl_recv) и ответы (vcl_fetch) с cookies не являются кешемы. Вы знаете, что все лучшее приложение лучше всего, и вы должны переписать генерическую логику кэширования к этому конкретному случаю. То есть вы должны определить, в каком корпусе лак делает поиск, пройти или доставлять.

В вашем случае у вас будут страницы (случай 1 и 2) без варьируемого файла cookie, которое будет кэшировать и разделяться всеми (запросы с / без файлов cookie); Просто не против req.http.cookie в vcl_recv. Я бы не кэширую страницы (случай 3) с вариантом печенья - по крайней мере не в течение длительного времени, так как они не могут быть переданы вообще; сделать «проход» в VCL_FETCH.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top