Django 角度:为每个请求添加一个随机数,以禁用IE缓存

Django 角度:为每个请求添加一个随机数,以禁用IE缓存,django,caching,angularjs,Django,Caching,Angularjs,我的病很重。为了解决这个问题,用户建议在url中添加一个随机数。比如说 虽然这会起作用,但我正在寻找一种全局添加随机数/全局禁用IE缓存的方法,并且对于资源xhr get调用也禁用了缓存。我猜我可以通过使用以下方法之一来实现这个目标。但我不确定我到底要做什么 a) 使用$httpProvider.defaults.transformRequest b) 通过使用添加在v中的请求/响应承诺链接,这是IE的一个老问题。不确定如何处理Angular的$httpProvider(或我想要的),但这里有一

我的病很重。为了解决这个问题,用户建议在url中添加一个随机数。比如说

虽然这会起作用,但我正在寻找一种全局添加随机数/全局禁用IE缓存的方法,并且对于资源xhr get调用也禁用了缓存。我猜我可以通过使用以下方法之一来实现这个目标。但我不确定我到底要做什么

a) 使用
$httpProvider.defaults.transformRequest


b) 通过使用添加在v

中的
请求/响应承诺链接
,这是IE的一个老问题。不确定如何处理Angular的$httpProvider(或我想要的),但这里有一个函数可以向任何url添加随机值,无论它是否已经使用查询字符串:

function noCacheUrl(url) {
    var urlParser = document.createElement('a');
    urlParser.href = url;
    var q = "nc" + Math.random() + "=1";
    q = urlParser.search ? urlParser.search + "&" + q : "?" + q;
    return urlParser.protocol + "//" + urlParser.host + urlParser.pathname + urlParser.hash + q;
}
请注意,添加的查询参数的名称是随机的,而不是值,因此不太可能与任何现有的名称/值对发生冲突。示例:&nc0.8578296909108758=1


我通过使用Django和自定义中间件,在服务器上的响应中不添加缓存头,解决了缓存问题

class NeverCacheXhrMiddleware(object):
    """
    sets no-cache headers for all xhr requests
    xhr requests must send the HTTP_X_REQUESTED_WITH header to 
    be identified correctly as a xhr request using .is_ajax()
    see: http://stackoverflow.com/questions/49547/making-sure-a-web-page-is-not-cached-across-all-browsers
    """
    def process_response(self, request, response):
        if request.is_ajax():
            response['Cache-Control'] = 'no-cache, no-store, must-revalidate'
            response['Pragma'] = 'no-cache'
            response['Expires'] = '0'
        return response

谢谢我想将此函数与http请求相结合将是一种有效的方法。尽管如此,我还是通过在服务器端的响应中不添加缓存头解决了这个问题,请参阅我对这个问题的回答。