1. 程式人生 > >Tomcat 配置gzip無效

Tomcat 配置gzip無效

提升Tomcat效能方法有很多種,使用NIO Connector和啟用gzip壓縮是其中兩種。

NIO:Java New IO,使用了多路複用的技術,無疑要比普通的IO socket要高效。

gzip:對需要傳輸到前臺的內容首先在記憶體中進行gzip壓縮,這樣可以大大的減少網路頻寬佔用。前提是前臺的Accept-Encoding允許gzip。

但是,當同時配置了這兩個時,會發現大於48KB的檔案並沒有進行壓縮。

經查Tomcat原始碼,發現org.apache.catalina.servlets.DefaultServlet中:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 /** * Check if sendfile can be used. */  protected boolean checkSendfile(HttpServletRequest request,  HttpServletResponse response,  CacheEntry entry,  long length, Range range) {  if ((sendfileSize > 0 && (entry.resource != null
&& ((length > sendfileSize) || (entry.resource.getContent() == null))  && (entry.attributes.getCanonicalPath() != null && (Boolean.TRUE == request.getAttribute("org.apache.tomcat.sendfile.support"))  && (request.getClass().getName().equals(
"org.apache.catalina.connector.RequestFacade"))  && (response.getClass().getName().equals("org.apache.catalina.connector.ResponseFacade"))) {  request.setAttribute("org.apache.tomcat.sendfile.filename", entry.attributes.getCanonicalPath());  if (range == null) {  request.setAttribute("org.apache.tomcat.sendfile.start", new Long(0L));  request.setAttribute("org.apache.tomcat.sendfile.end", new Long(length));  } else request.setAttribute(