@hagen1778

304 Not modified. Как кешировать ajax запросы?

Имеется бэкэнд на Yii2. Контроллер перед ответом проверяет:
$behaviors['httpCache']=[
            'class' => 'yii\filters\HttpCache',
            'only' => ['index','test'],
            'lastModified' => function ($action, $params) {
                    $q = new \yii\db\Query();
                    return $q->from('user')->max('updated_at');
                },
        ];


Если ответ не менялся, то браузер возвращает закешированный ответ.

Подняли приложение на ангуляре, где реализовали следующее:
$scope.linkto = function() {

            $http.get("http://yii-application/frontend/web/users?access-token=1234567", {crossDomain:true, xhrFields: {withCredentials:true}})
                .success( function (data) {
                    console.log(data);
                    $scope.news = data;
                })
                .error(function(jqXHR, textStatus, errorThrown) {
                    console.log("error " + textStatus);
                })
        }
        $scope.linkto();


И html:
<div ng-controller="TabController">
    <button ng-click="linkto()">clickme</button>
</div>


Если функция выполняется при загрузке страницы, то все работает отлично - проверяется запрос, если ничего не менялось отдается 304 Not modified. Если менялся - то получаем новый ответ, соответсвенно и время получения ответа увеличивается.
А вот если нажимать на кнопку, которая вызывает ту же функцию, то эти условия не выполняются и всегда приходит 200 OK from cache. Даже если поменяется ответ. Вот такая заковыка...
Помогите разобратсья
  • Вопрос задан
  • 2898 просмотров
Пригласить эксперта
Ответы на вопрос 2
haiku
@haiku
cache: false поставить в $http.get? Рандомную циферь можете добавлять к запросу каждый раз, ETagи юзать.

https://docs.angularjs.org/api/ng/service/$http
If you set the default cache to false then only requests that specify their own custom cache object will be cached. Оттуда.
Ответ написан
@hagen1778 Автор вопроса
Заголовки разные. Но функция ведь одна и та же
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы