Http 以编程方式设置Jetty GzipHandler
我在玩JettyHttp 以编程方式设置Jetty GzipHandler,http,compression,jetty,embedded-jetty,Http,Compression,Jetty,Embedded Jetty,我在玩JettyGzipHandler,它的工作原理似乎很奇怪:它只压缩已经压缩的文件 我的整个设置是 GzipHandler gzipHandler = new GzipHandler(); gzipHandler.setHandler(myHandler); server.setHandler(gzipHandler); 浏览器(Chromium)总是发送一个包含 Accept-Encoding:gzip,deflate,sdch 所以根据文件 GZIP处理程序此处理程序将GZIP响应的
GzipHandler
,它的工作原理似乎很奇怪:它只压缩已经压缩的文件
我的整个设置是
GzipHandler gzipHandler = new GzipHandler();
gzipHandler.setHandler(myHandler);
server.setHandler(gzipHandler);
浏览器(Chromium)总是发送一个包含
Accept-Encoding:gzip,deflate,sdch
所以根据文件
GZIP处理程序此处理程序将GZIP响应的内容,如果:
- 过滤器映射到匹配的路径
- 响应状态代码>=200,我们可以使用GzipFilter来实现这个结果。的Jetty文档提供了大量详细信息支持的参数列表。要以编程方式启用它
gzip过滤器基本上是一个服务器端过滤器,在处理压缩需求方面非常有效
样本过滤器配置
<filter> <filter-name>GZipFilter</filter-name> <display-name>Jetty's GZip Filter</display-name> <description>Filter that zips all the content on-the-fly</description> <filter-class>org.mortbay.servlet.GzipFilter</filter-class> <init-param> <param-name>mimeTypes</param-name> <param-value>text/html</param-value> </init-param> </filter> <filter-mapping> <filter-name>GZipFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
以下是我如何在Jetty 9.3.7中配置GzipHandler的:GZipFilter Jetty的GZip过滤器 过滤器,可动态压缩所有内容 org.mortbay.servlet.gzip过滤器 模版 文本/html GZipFilter /*
GzipHandler gzipHandler = new GzipHandler(); gzipHandler.setIncludedMimeTypes("text/html", "text/plain", "text/xml", "text/css", "application/javascript", "text/javascript"); gzipHandler.setHandler(myHandler); handlerList.addHandler(gzipHandler);
在本例中,
是myHandler
的一个实例。默认情况下,Gzip处理程序只对响应代码在200范围内的ResourceHandler
请求进行Gzip响应。对于下一个出现的人,下面介绍如何启用请求解压缩,其中GET
是一个扩展Handler
的类。请求解压缩的重要部分是org.eclipse.jetty.server.Handler.AbstractHandler
,默认为includeMethods
,以及GET
,需要大于0,但默认为0。守则:inflateBuffer
//create server using given threadpool Server server = new Server(8080); GzipHandler gzipHandler = new GzipHandler(); gzipHandler.setIncludedMethods("PUT", "POST", "GET"); gzipHandler.setInflateBufferSize(2048); gzipHandler.setHandler(handler); server.setHandler(gzipHandler); server.start(); server.join();
我想,你是对的,但是使用过滤器看起来比自己做压缩工作要多(缺点是可能有bug)。到目前为止,我所做的是通过预计算的压缩数据来处理静态资源,这相当简单。不要重新发明轮子。不要手动写入压缩逻辑。这个问题已经解决了很多次。添加过滤器可能看起来很复杂,但事实并非如此。我已经用过滤器配置更新了我的答案,如果这有帮助的话,我已经重新发明了轮子,它可能比运行过滤器更简单(因为我还没有使用过滤器,也没有使用XML等等)。目前,我仅将其用于预取资源(这已经足够了;我将它们都保存在内存中进行压缩和未压缩)。jetty>8中不推荐使用GzipFilter,应使用GzipHandler。现在我想知道…GzipFilter不仅不受欢迎,而且被一个无效的无操作存根所取代。请参阅:什么是handlerList类型?你能发布完整的代码吗?这是我的@Configuration类吗?
的类型是handlerList
。基本上我的代码是这样的:handlerList
servers=代码>
HandlerList HandlerList=new HandlerList()代码>
handlerList.add(…)代码>
s.setHandlerList(handlerList)代码>
handlerList.start()代码>
我没有使用s.start()
,所以我无法回答这个问题。谢谢。我在pom.xml中使用嵌入式maven jetty。上述代码是否有可能集成到我的嵌入式jetty中?@配置