Chrome缓存覆盖angularjs禁用缓存

时间:2015-06-09 18:15:34

标签: angularjs caching browser-cache angularjs-service cache-control

我正面临着一个特殊的问题。我目前正在使用chrome 我有angularjs服务如下

var url = '/api/acts/' + accountId + '/policy/?filter=NEW_POLICY';
                return $http({
                    method : 'GET',
                    url : url,
                    cache : false,
                    headers: {'disableErrorRedirect': true,'Cache-Control' : 'no-cache'}
                });

在这里,我设置了不使用缓存的所有属性,并始终进行新的调用。但我已经看到,5次中有3次采用相同的值。 一段时间后它会自动刷新。服务器端没有缓存问题,因为我没有缓存它。在Chrome Dev工具中,有一个名为Disable Cache的选项,当我检查它时,结果永远不会被缓存,我得到最新的结果。 我想确保尽管chrome上有任何设置,但总是应该返回refereshed数据。 我真的很困惑如何处理这个问题。如上所述,我编写了所有angularjs和http代码以避免缓存。 任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,并通过全局声明缓存配置来解决它。它不是理想的,但比添加随机字符串要好。

angular.module('app', [])
  .config(function ($httpProvider) {
    $httpProvider.defaults.headers.common['Cache-Control'] = 'no-cache';
    $httpProvider.defaults.cache = false;
  });

答案 1 :(得分:0)

您想要获得的文件是什么?在您的网址末尾它有/policy/?filter=NEW_POLICY但在问号之前和斜杠之后没有实际的文件名。但无论如何......

您始终可以忽略缓存版本,并使用/baseroot/id/postroot/file?random_string从服务器获取。例如:

var rand_num = Math.random();
var url = '/api/acts/' + accountId + '/policy/filename?v=' + rand_num + '&filter=NEW_POLICY' 

或者只是var url = '/api/acts/' + accountId + '/policy/?v=' + rand_num + '&filter=NEW_POLICY'我猜。就像我说的,我不知道你在url路径末尾没有文件名的情况。

不完全确定这是否是您案例中网址的有效查询字符串,但您可以尝试查看它是否有效。