caching - 你能强制浏览器总是获取缓存的文件而不是 304 的往返吗?

标签 caching browser header http-headers browser-cache

据我了解,这就是浏览器缓存的工作原理。假设,一个遥远的 future header 已设置为一年,而 foo.js 已设置为缓存。以下是一些场景:

  • 第一次访问页面,服务器返回200,foo.js缓存一年。
  • 下次访问时,浏览器会检查缓存,但如果 foo.js 已被修改,则必须检查服务器。如果没有,服务器返回 304 - Not Modified。
  • 用户已经在页面上(并且 foo.js 在缓存中)单击链接转到另一个页面,浏览器查看 foo.js 的缓存版本并提供它,而无需往返服务器并返回 200(缓存)。
  • 用户已经在页面上(并且 foo.js 在缓存中)并且由于某种原因点击 F5/Reload,浏览器检查缓存但必须往返服务器并检查 foo.js 是否已被修改。如果不是,服务器返回 304。

  • 如您所见,无论何时刷新页面,它都必须访问服务器以检查文件是否已被修改。我知道这不是很多,服务器只会返回标题信息,但在某些情况下往返时间非常重要。

    问题是,有没有办法可以避免这种情况,因为我已经设置了文件的到期时间。我只是希望它始终从缓存中获取它,直到过期或用其他东西替换文件(通过对其进行版本控制)。

    最佳答案

    据我了解,按 F5/Ctrl-R 是浏览器特定的操作,因此将控制权留给浏览器。

    如果用户在单击另一个操作之前清除缓存怎么办?因此,即使在 F5 中有强制使用缓存的 HTTP 规范,也不能保证您能够满足您的需求。

    只需配置和编码以尽可能多地缓存,其余的留给用户。

    关于caching - 你能强制浏览器总是获取缓存的文件而不是 304 的往返吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13420471/

    相关文章:

    C header 和未声明变量中的类型冲突?

    jquery - 如何使用 jQuery 的 $.post 函数获取 "location" header ?

    android - 缓存 Android 应用程序数据,始终使用 getFilesDir() 是否安全?

    php - 带有 codeigniter 问题的数据库缓存

    c++ - QWebEngine 5.7.1 离线导航加载缓存

    browser - Minio:在浏览器中渲染图像

    java - Guava 缓存的预加载值

    javascript - 使用 Javascript 或 jQuery 检测导航中的取消

    当焦点离开窗口时自动暂停视频的Javascript解决方案

    wcf - 如何在WCF请求和响应的soap header 中添加MessageID?