是否可以配置嵌入式Jetty(v9)以仅为特定资源文件类型设置特定标头。
目前,我没有做任何特殊的事情来处理静态资源,所以可能Jetty有一些默认的处理程序设置来做到这一点。是否可以使用某些自定义设置扩展或重载该默认处理程序,以便我只能为Cache-Control
文件设置html
标头?
我试图完成类似于以下Apache配置的事情:
<Files "*.html">
Header set Cache-Control "public, max-age=900"
</Files>
...在我的Jetty设置中:
public static void main(String[] args) throws Exception {
Server server = new Server(443);
WebAppContext webapp = new WebAppContext();
webapp.setContextPath("/");
webapp.setWar("war");
server.setHandler(webapp);
...
...
}
实际上,如果这可以在jetty.xml或其他配置文件中完成,那将是更可取的。
答案 0 :(得分:2)
我能够在jetty-env.xml中为我的webapp使用此配置完成我想要的任务:
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<Call name="insertHandler">
<Arg>
<New id="Rewrite" class="org.eclipse.jetty.rewrite.handler.RewriteHandler">
<Set name="rewriteRequestURI"><Property name="jetty.rewrite.rewriteRequestURI" deprecated="rewrite.rewriteRequestURI" default="true"/></Set>
<Set name="rewritePathInfo"><Property name="jetty.rewrite.rewritePathInfo" deprecated="rewrite.rewritePathInfo" default="false"/></Set>
<Set name="originalPathAttribute"><Property name="jetty.rewrite.originalPathAttribute" deprecated="rewrite.originalPathAttribute" default="requestedPath"/></Set>
<Call name="addRule">
<Arg>
<New class="org.eclipse.jetty.rewrite.handler.HeaderPatternRule">
<Set name="pattern">*.html</Set>
<Set name="name">Cache-Control</Set>
<Set name="value">Max-Age=900,public</Set>
<Set name="terminating">true</Set>
</New>
</Arg>
</Call>
</New>
</Arg>
</Call>
</Configure>
答案 1 :(得分:1)
您的解决方案帮助我以完全嵌入的方式实现了这一点。
我正在使用jetty 9.2.19 org.eclipse.jetty.rewrite.handler.RewriteHandler。我将ResourceHandler包装在此RewriteHandler中以设置特定的http标头(此处为Cache-Control):
RewriteHandler rewriteHandler = new RewriteHandler();
rewriteHandler.addRule(new Rule()
{
@Override
public String matchAndApply(String target, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws IOException
{
// you can check the target for its path or filetype or whatever
if((target.endsWith(".woff2")) || ... || (target.endsWith(".jpg")))
{
httpServletResponse.setHeader("Cache-Control", "public, max-age=2592000");
}
return null;
}
});
// set the RewriteHandler around the ResourceHandler
rewriteHandler.setHandler(resource_handler);
// set the RewriteHandler to the Webservers Handlerlist...