Я не понимаю, как сделать кеш недействительным, потому что мое appliaction не вызывается, когда я в первый раз возвращаю запрос с заголовком Expires, а затем приложение не вызывается, когда я пытаюсь снова вызвать тот же запрос
$response
->setExpires($this->helper->getExpiresHttpCache());
И я добавил класс
class CacheKernel extends HttpCache
{
protected function invalidate(Request $request, $catch = false)
{
if ('PURGE' !== $request->getMethod()) {
return parent::invalidate($request, $catch);
}
if ('127.0.0.1' !== $request->getClientIp()) {
return new Response(
'Invalid HTTP method',
Response::HTTP_BAD_REQUEST
);
}
$response = new Response();
if ($this->getStore()->purge($request->getUri())) {
$response->setStatusCode(Response::HTTP_OK, 'Purged');
} else {
$response->setStatusCode(Response::HTTP_NOT_FOUND, 'Not found');
}
return $response;
}
protected function getOptions()
{
return [
'default_ttl' => 0,
];
}
}
и в индексе. php add
$kernel = new Kernel($_SERVER['APP_ENV'], (bool) $_SERVER['APP_DEBUG']);
// Wrap the default Kernel with the CacheKernel one in 'prod' environment
if ('prod' === $kernel->getEnvironment()) {
$kernel = new CacheKernel($kernel);
}
, но HTTP-кеш работает для каждой среды. Только когда в браузере отключен флажок Disable cache
приложение будет звонить.
В браузере у меня был правильный заголовок Expires: Fri, 01 May 2020 11:59:00 GMT
. И если отправленный запрос снова, с включенной отладкой, отладка не вводится в приложение, но ответ содержит данные результата. В этом случае General
секция содержит Status Code: 200 OK (from disk cache)
Request URL: http://symfony.localhost/api/products/extra_fields
Request Method: GET
Status Code: 200 OK (from disk cache)
Remote Address: [::1]:80
Referrer Policy: no-referrer-when-downgrade
Но где же эта точка, где сравнивать текущее время и время exprires? Пример Я хочу использовать глобальные переменные для истечения времени. Пример после вызова какого-то другого API-запроса api/product/{id}
Я хочу изменить время истечения для /api/products/extra_fields
, но приложение не вызывается, где я могу это сделать или это возможно? Может ли кто-нибудь помочь мне понять, как с этим справиться?
Response
HTTP/1.1 200 OK
Server: nginx
Content-Type: application/json
X-Powered-By: PHP/7.3.14
Cache-Control: private, must-revalidate
Date: Fri, 01 May 2020 07:39:35 GMT
Expires: Fri, 01 May 2020 11:59:00 GMT
Request
GET /api/products/extra_fields HTTP/1.1
accept: application/json
Referer: http://symfony.localhost/api/doc
User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.117 Safari/537.36