caching - 为 OSGi 环境中服务的静态资源设置自定义响应 header

标签 caching osgi httpservice pax-web

我们试图解决的任务是使用 HttpService.registerResources() 为在 OSGi 环境中公开的静态资源(例如 Cache-Control)设置自定义响应头。方法。

考虑到以下详细信息,实现此目标的最佳方式是什么:

  • 可能有许多基于“资源”服务集的资源注册。这些 OSGi 服务提供有关静态资源路径和它们所在的包的信息。我们预计资源路径注册量在 50 到 200 之间。
  • 实现应该是 OSGi 友好的。 Pax Web extensions 的用法是可以接受的。
  • 实现应与网络服务器无关(例如,不直接了解 Jetty)。

我们想到的解决方案是:

  1. HttpContext.handleSecurity 中设置响应 header

    • 这种方法的缺点是处理安全性的方法也将负责与安全性完全无关的逻辑。
  2. 使用与资源 URI 相同的 URI 为每个 registerResource() 调用注册过滤器。过滤器将响应设置响应 header 。

    • 这种方法的缺点是可能有太多过滤器用于同一目的。但到目前为止,这似乎是最简单的解决方案。
  3. 在根路径上注册一个过滤器并将其配置为在请求 URI 对应于已知资源 URI 路径时设置响应 header 。

    • 这种方法的缺点是必须对过滤器进行训练以了解资源路径,这意味着实现起来会稍微复杂一些。

我们渴望听到对建议解决方案的意见,并了解其他替代方案。

最佳答案

基于 Equinox Jetty 的 HttpService 实现已经支持开箱即用的所有资源注册的 If-None-MatchIf-Modified-Since 请求 header 。

但是,如果它确实需要与框架无关并符合 HttpService 标准,并且您无论如何都以编程方式注册您的资源,那么我建议编写您自己的 servlet(例如 the one from Equinox)来处理资源请求。而不是使用 registerResources 直接使用此 servlet 和 registerServlet 包装任何资源注册。您可以在那里实现任何缓存策略。

关于caching - 为 OSGi 环境中服务的静态资源设置自定义响应 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11826853/

相关文章:

caching - Zf2 - ZfcRbac/AuthenticationService - Doctrine2

linux - 如何在我的 linux 系统中停止磁盘 I/O 的页面缓存?

caching - 英伟达 CUDA : cache L2 and multiple kernel invocations

grails - Groovy + OSGi还是Grails?

java - 将 SurfaceEllipse 与另一个 NASA Worldwind 相交

testing - Flex 4 - 允许在本地和开发服务器上进行 HTTPService 测试的技术

actionscript-3 - Flex 3.2 与 Flex >= 3.5 的 HTTPService/ResultEvent

image - 链接文件无效

mysql - 事务回滚在 karaf 中不起作用

javascript - Ionic 中的 Angularjs $http 发布错误