7

当前流行的浏览器是否在缓存 * 我需要注意的 XMLHttpRequest 响应时存在特殊问题?

我希望能够在每个页面上包含 XMLHttpRequest 查询,作为动态加载与页面类型相关的内容(即 JSON)或行为(如 eval()ed Javascript)的方法,但想确保资源如果服务器发送了正确的标头,它从服务器接收到的信息可能会被缓存。

我很担心阅读这篇文章,其中提到诸如 Firefox 1.1 之类的浏览器不会缓存通过 XMLHTTPRequest 获得的任何内容,并且它总是要求完全发送新数据(使用 Cache-Control 并且没有 If-Modified-Since),而不管标头如何由服务器发送。

显然那篇文章已经很老了——我什至不记得有 Firefox 1.1;那么对于当前流行的浏览器,我需要考虑哪些因素?当我特别希望缓存响应时,有什么技巧吗?

**为了澄清我的问题,缓存是指客户端缓存,其中服务器发出新鲜信息(以 Cache-Control: max-age 指令或 Expires: 标头的形式),浏览器存储其缓存中的响应以及到期日期,因此可以从浏览器缓存中满足从后续页面发出的相同资源的未来请求,而无需与服务器进行任何联系。所有主流浏览器都对大多数内容正确执行此操作,但我听说 Firefox 无法对 XMLHttpRequest 内容执行此操作。我要问的是,是否有人知道任何现代浏览器在使用 XMLHttpRequest 时不根据规范缓存响应的情况。*

4

2 回答 2

11

Mark Nottingham 有一组出色的功能测试来演示浏览器 XMLHttpRequest 缓存行为。在您想要支持的浏览器中加载页面,并确定您可以和不能依赖哪些技术来缓存您的响应。

于 2009-03-24T19:49:38.180 回答
4

尽管某些浏览器具有不同的默认值(默认情况下,IE 会缓存 AJAX 请求的结果,但默认情况下 Firefox 不会),但我知道的所有浏览器都会遵循 http 标头,例如Cache-Control。因此,只需为您的应用程序正确设置缓存标头即可。

这是一个例子:

    public ActionResult SomeAction()
    {
        var model = [...];
        Response.AddHeader("Cache-Control", "no-cache");
        return Json(model);
    }

现在 IE 和 Firefox 的行为都一样了;他们永远不会缓存操作的结果。

于 2009-03-24T14:02:30.387 回答