Почему Laravel (красноречиво) кэширует последний ответ от API-маршрута? - PullRequest
0 голосов
/ 26 мая 2018

Я создаю реактивную панель с помощью Laravel / VueJS.Когда приборная панель работает и соединение через сокет установлено, моя идея состоит в том, чтобы синхронизировать всех клиентов с одинаковым идентификатором пользователя, и после повторного подключения я отправляю запрос на конечную точку, и я снова synchronized.Синхронизация необходима, потому что все пользователи могут фактически изменить некоторые конфигурации на панель инструментов, например, выбрать элементы сетки или изменить их размер или перетащить их в другое место.

Проблема возникает, когда после повторного подключения к сокетам я запускаю запросв базу данных, чтобы получить данные снова, и я получаю тот же ответ, что и для запроса инициализации.Данные не обновляются.

Но когда я снова отключаюсь и подключаюсь еще раз.Данные снова синхронизируются.И я обновляю данные для второго вызова.

Я сделал это из-за заголовков Cache-control, но это мне ничего не дает.

Я пытался изменить заголовки в API.

return response()->json($response, 200, [
    'Cache-Control' => 'no-cache, no-store, must-revalidate'
]);

И для axios:

axios.get(payload.url, {
    headers: {
        'Content-Type': 'application/json',
        'Cache-Control' : 'no-cache, no-store, must-revalidate'
    }
}).then( response => {

Но это все еще не работает.

Мой красноречивый вызов:

$dashboards = Dashboard::where(
        'user_id', '=', $userId
    )->with([
    'layouts',
    'components' => function($query) {
        $query->with('config')->with('type');
    }
])->get();

Заголовки для первого вызоваВот как:

Cache-Control: must-revalidate, no-cache, no-store, private
Connection: Keep-Alive
Content-Length: 2564
Content-Type: application/json
Date: Sat, 26 May 2018 12:06:34 GMT
Keep-Alive: timeout=5, max=96
Server: Apache/2.4.29 (Win32) OpenSSL/1.1.0g PHP/7.2.1
X-Powered-By: PHP/7.2.1
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 90

Для второго звонка я получаю

Cache-Control: must-revalidate, no-cache, no-store, private
Connection: Keep-Alive
Content-Length: 2564
Content-Type: application/json
Date: Sat, 26 May 2018 12:07:29 GMT
Keep-Alive: timeout=5, max=100
Server: Apache/2.4.29 (Win32) OpenSSL/1.1.0g PHP/7.2.1
X-Powered-By: PHP/7.2.1
X-RateLimit-Limit: 100
X-RateLimit-Remaining: 94

Почему эта синхронизация работает для второго запроса, а не для первого?

1 Ответ

0 голосов
/ 28 мая 2018

Кажется, все в порядке, вероятно, речь шла о вызове Vue и асинхронного действия.Мне удалось это исправить с помощью Promise.Тем не менее, проблема с кешем также появляется после использования истории браузера (возвращаясь в браузере, как chrome).Странно то, что заголовки появляются в старой версии Laravel.Вышеприведенные заголовки вместе с max-age = 0 должны принудительно обновлять кеш.

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