Tomcat 配置gzip無效
阿新 • • 發佈:2018-12-30
提升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( |