3

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

考虑到以下细节,实现这一目标的最佳方式是什么:

  • 基于“资源”服务集可能有大量资源注册。这些 OSGi 服务提供有关它们所在的静态资源路径和捆绑包的信息。我们预计的资源路径注册量在 50 到 200 之间。
  • 实现应该是 OSGi 友好的。Pax Web 扩展的使用是可以接受的。
  • 实现应该与 Web 服务器无关(例如,没有关于 Jetty 的直接知识)。

我们想到的解决方案是:

  1. 在HttpContext.handleSecurity中设置响应头

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

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

    • 这种方法的缺点是必须对过滤器进行教育以了解资源路径,这意味着实现更复杂一些。

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

4

1 回答 1

2

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

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

于 2012-08-06T13:30:37.880 回答