【问题标题】:How do we control web page caching for resources on OSGI?我们如何控制 OSGI 上资源的网页缓存?
【发布时间】:2020-03-25 03:16:26
【问题描述】:

我需要缓存来自 AEM 的资源(图像和字体)。使用 SlingHttpServletRequest 我可以获取所有资源路径。那么如何将实际资源放入浏览器缓存中。我使用 slingResponse.setHeader() 检查它。但仍然无法找到将资源路径放入浏览器缓存的方法。

【问题讨论】:

  • 除了Dispatcher提供的缓存吗?
  • 已实现调度程序缓存。需要实现浏览器缓存。
  • 好的,是的,在这种情况下,您可以添加这些标头,让浏览器知道它可以将文件存储在缓存中。您可以使用扩展或正则表达式来匹配某些模式或位置。

标签: java osgi aem osgi-bundle sling


【解决方案1】:

使用Cache-Control 标头控制浏览器缓存。理想情况下,这需要在调度程序上进行设置。在标准设置上,调度程序未配置为缓存响应标头。因此,当从缓存中提供服务时,服务器上设置的任何标头都不会用于后续请求。

使用调度程序上的mod_headers 模块为您感兴趣的文件发送 max-age 或 expires 值。

例如:在浏览器上缓存所有静态资源 1 年

<LocationMatch "^\/etc\/designs\/my-project\/clientlibs-site\/(css|images|fonts|placeholders)\/.*">
  Header set Cache-Control "public, max-age=31536000"
</LocationMatch>

在遇到缓存控制标头时,浏览器会缓存资源。

【讨论】:

  • 为什么你说最好在调度程序中设置它而不是在 aem 本身中设置?
  • 大部分时间由调度程序提供内容,默认情况下不保存 AEM 发送的响应标头
  • 在 AEM 中,我设置了响应标头,例如 respose.setHeader("Cache-control", "private max-age=31536000");可以吗?当我检查相关资源时,它显示的是设定值。
  • 您在环境中是否有调度程序,它是否显示调度程序上重复请求的标头
  • 这是检查它是否正常工作的唯一方法。除此之外我如何检查它是否正常工作?
猜你喜欢
  • 1970-01-01
  • 2011-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-05
  • 2010-10-11
  • 1970-01-01
  • 2010-12-29
相关资源
最近更新 更多