【问题标题】:Is caching in browser automatic?浏览器中的缓存是自动的吗?
【发布时间】:2015-06-23 23:07:54
【问题描述】:

我有一个向 REST API 发送请求的 JavaScript 应用程序,来自服务器的响应具有缓存标头(如 ETag、缓存控制、过期)。浏览器中的响应缓存是自动的,还是应用必须实现某种机制来保存数据?

【问题讨论】:

  • 您可以使用 chrome/firefox 上的网络检查器检查自己。 (剧透:是的;如果标头设置正确,浏览器将缓存 ajax 调用)

标签: http caching


【解决方案1】:

AJAX 请求与普通请求没有什么不同——它是一个 GET/POST/HEAD/浏览器发送的任何请求,并按此方式处理。已确认here

现代浏览器的 HTTP 和 Cache 子系统比 Ajax 的 XMLHttpRequest 对象低得多。在这个级别,浏览器不知道也不关心 Ajax 请求。它只是遵循基于从服务器返回的响应标头的正常 HTTP 缓存规则。

根据the jQuery documentation,缓存也可以通过至少一种常用方式(附加查询字符串)无效:

缓存(默认:true,对于 dataType 'script' 和 'jsonp' 为 false)

类型:布尔值

如果设置为 false,它将强制浏览器不缓存请求的页面。注意:将缓存设置为 false 仅适用于 HEAD 和 GET 请求。它通过将“_={timestamp}”附加到 GET 参数来工作。其他类型的请求不需要该参数,除非在 IE8 中对已由 GET 请求的 URL 进行 POST。

简而言之,给定相同的标头,AJAX 响应的缓存方式与其他请求相同。

【讨论】:

    【解决方案2】:

    浏览器自动处理资源缓存。您似乎要问的是服务器的实际响应。

    您需要自己在应用程序中进行设置。您可以在前端和后端这样做。

    大部分 JS 框架都实现了缓存控制,例如:

    jQuery

    $.ajaxSetup({
        // Disable caching of AJAX responses
        cache: false
    });
    

    AngularJS

    $http.defaults.cache = false;
    

    等等。

    在后端这真的取决于你使用什么语言,什么服务器引擎等。

    例如检查 Memcached http://memcached.org/

    与 Web 开发的任何事情一样,这里和那里都有一些奇怪的事情,例如 某些 IE 版本会自动查询请求,您必须在 url 中添加唯一 id 以防止这种情况发生。

    【讨论】:

      【解决方案3】:

      来自https://developer.mozilla.org/en-US/docs/AJAX/Getting_Started

      注意2:如果你不设置header Cache-Control:no-cache 浏览器会缓存响应并且永远不会重新提交请求,使得调试变得“具有挑战性”。您还可以附加始终不同的附加 GET 参数,例如时间戳或随机数(请参阅绕过缓存)

      【讨论】:

        【解决方案4】:

        浏览器应该自动处理缓存。 检查这篇文章,javascript只有清除缓存方法。 https://developer.chrome.com/extensions/browsingData

        【讨论】:

        • 真的是 HTTP 响应的缓存吗?在我看来,它是网站资源的缓存
        • 视情况而定。几乎每个现代浏览器都会默认缓存 .js、.css 和图像。在这些类型的文件中,有一些选项要求浏览器不缓存。在用户端,通常有不缓存任何内容的设置。
        • 我说的不是缓存资源,而是缓存来自 json 中的 rest api 的数据。
        【解决方案5】:

        如果服务器发送带有任何缓存头的响应,浏览器应该尊重它。资源或ajax请求之间没有区别。

        您还可以在 ajax 调用中指定缓存标头,使其不使用缓存并从服务器获取整个响应。

        【讨论】:

          【解决方案6】:

          由于缓存和过期标头,大多数现代浏览器都支持浏览器缓存

          http://www.arlocarreon.com/blog/http/http-requests-and-your-browsers-cache/

          There are 2 apects of an HTTP request that can qualify it for being cached:  
            - Specifc HTTP cache and expire headers  
            - A unique URL
          

          有趣的阅读:

          http://www.mobify.com/blog/beginners-guide-to-http-cache-headers/

          【讨论】:

            猜你喜欢
            • 2013-06-02
            • 1970-01-01
            • 2021-01-25
            • 2015-11-17
            • 2019-12-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多