java - 响应头来缓存响应?

标签 java browser browser-cache cache-control

在我的网络应用程序的某些页面中,我有两种浏览器缓存方案

场景 1:- 如果不在服务器端修改,我想从浏览器缓存进行服务器。例如:-

  1. 用户向所有员工发出请求
  2. 响应返回 10 名员工
  3. 用户再次向所有员工发出请求
  4. 期望这次应该从浏览器缓存中提供
  5. 用户又创建了一名员工
  6. 用户再次向所有员工发出请求
  7. 期望这次应该从服务器而不是浏览器缓存提供最新服务

我打算使用下面的标题

response.setHeader("Cache-Control", "no-cache"); 

作为

no-cache is not instructing the browser or proxies about whether or not to cache the content. It just tells the browser and proxies to validate the cache content with the server before using it

场景 2:- 但对于一些敏感页面,我根本不想缓存,我计划使用下面的标题

response.setHeader("Cache-Control",  "no-store"); 

但是有些文章可以安全地使用下面的标题,使其适用于所有浏览器。所以我将使用下面的

response.setHeader("Cache-Control", "no-cache, no-store"); 

我提议的实现正确吗?

最佳答案

对于场景#1,您确实需要将Cache-Control设置为no-cache(或设置max-age 以获得更好的可扩展性,但在这种情况下,您不需要最新值),但您还需要使用 HTTP header ETag以便让浏览器检查数据内容是否发生变化,以便浏览器能够知道缓存条目是否可以重用。

对于场景 #2,您需要将 Cache-Control 设置为 no-store 以防止浏览器按原样缓存数据标准方式,但实际上无缓存、无存储将有助于在旧浏览器上工作(如果您也需要支持它们)。

关于java - 响应头来缓存响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37640274/

相关文章:

java - 使用类对象创建通用二维数组

java - 迭代器和 ConcurrentModificationException

java - H2 JDBC 准备语句异常

c# - 如何强制更新/防止在 Linux 上运行并由 nginx 反向代理服务器托管的 .NET Core Web 应用程序的 HTML 缓存

java - 为什么 hibernate 在更新事务期间调用删除?

php - 如何防止长时间运行的进程中的浏览器超时?

css - 网页不会呈现指定的字体

internet-explorer - 为 IE 等修复网站

google-chrome - Chrome 中的正常重新加载不使用缓存

java - 退出后避免返回页面渲染