为OSGi环境中提供的静态资源设置自定义响应标头

时间:2012-08-06 10:51:10

标签: caching osgi httpservice pax-web

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

根据以下细节,实现这一目标的最佳途径是什么:

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

我们想到的解决方案是:

  1. HttpContext.handleSecurity

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

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

    • 这种方法的缺点是必须让过滤器了解资源路径,这意味着实现起来要复杂一些。
  4. 我们渴望听到有关建议解决方案的意见,并了解其他替代方案。

1 个答案:

答案 0 :(得分:2)

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

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