2010-01-07 1 views
3

압축 된 html 콘텐츠를 제공하도록 Jetty를 설정하려고합니다. web.xml에서 GzipFilter를 설정하고/*에 맵핑했지만 작동하지 않습니다. 다음은 필터 구성입니다.Jetty에서 GzipFilter 설정 문제가 발생했습니다.

<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> 

방금 ​​방석을 사용하기 시작 했으므로 솔루션이 매우 간단 할 수 있습니다. 나에게 도움이 될만한 문서에 나를 연결할 수 있다면, 그렇게해도 좋을 것이다.

답변

0

무엇이 오류입니까? classpath 문제가 발생 했습니까? classpath 인 경우 gzipfilter 클래스가 돌발 런타임에 사용 가능한지 확인해야합니다. 그렇지 않으면 죽게됩니다.

+1

마침내이 문제로 돌아갈 시간이되었습니다. 나는 어떤 오류도 내지 않고있다. 그러나 실제로 어떤 gzipping도 보이지 않습니다. 필터가 실제로 작동하는지 어떻게 확인할 수 있습니까? – Misha

+0

@Misha, TCP 패킷 추적 소프트웨어를 사용하거나 http://www.gidnetwork.com/tools/gzip-test.php와 같은 일부 온라인 도구를 사용하여 확인할 수 있습니다. – spektom

-1

"Content-Encoding : gzip"요청 헤더와 함께 요청을 보냅니 까?

3

GZIP 압축

GZIP 압축 "와이어를 통해"전송되는 데이터의 양을 감소 시키는데 사용될 수있다. 압축은 전송 인코딩으로 적용됩니다. 이렇게하면 웹 응용 프로그램 성능이 크게 향상 될 수 있지만 더 많은 CPU를 소비 할 수 있으며 일부 콘텐츠 (예 : 이미지)를 제대로 압축 할 수 없습니다.

정적 컨텐츠

제티 기본 서블릿 전송 인코딩으로 미리 압축 정적 콘텐츠를 제공하고 즉석 압축하는 비용을 피할 수있다. "gzip"init 매개 변수가 true로 설정되면, Jetty는 압축 된 정적 자원을 찾습니다. 따라서 "foo.txt"에 대한 요청이 수신되고 "foo.txt.gz"파일이 존재하면 gzip 전송 인코딩을 사용하여 "foo.txt"로 제공됩니다.

제티 gzip을 필터

GzipFilter 거의 모든 동적 자원 (서블릿)에 적용될 수있는 압축 필터이다. 일반적으로 사용 가능한 압축 필터 (예 : 콘텐츠 길이를 설정할 수있는 모든 방법을 처리)에서 많은 버그를 수정하고 Jetty의 연속성 및 요청 일시 중지를 테스트했습니다.

일부 사용자 에이전트는 압축에서 제외되어 일부 공통 브라우저 버그 (예 : IE를 의미)를 피할 수 있습니다.

는 부두 문서에서 참조하십시오 http://docs.codehaus.org/display/JETTY/GZIP+Compression 당신이 Gzipfilter 소스 코드를 볼 수

가 여기에 유용한 많은 코멘트가

: http://download.eclipse.org/jetty/stable-7/xref/org/eclipse/jetty/servlets/GzipFilter.html

1

때때로 Gzipfilter은 어떻게 처리하는 버퍼에 따라 몇 가지 문제를 가지고 사용 및 플러싱. 따라서 org.eclipse.jetty.servlets.IncludableGzipFilter (실제로 GzipFilter를 확장)를 사용하면 문제를 해결할 수 있습니다.

3

나는이 일을하려고 큰 기대를 가지고 있었기 때문에 이것에 대해서도 대답 할 것이고, 나는 마침내 그것을했다. 또한 저는 HTTP의 훌륭한 세부 사항에 대한 전문가가 아니기 때문에 전문가가 아닌 응답을 줄 것입니다.

먼저 GZipFilter가 작동하는지 확인하는 방법은 다음과 같습니다. 파이어 폭스 시작, 파이어 버그 애드온, 파이어 버그 애드온 시작, 넷 탭으로 이동. 그런 다음 GZipped 응답을 반환해야하는 URL에 액세스했습니다.여기 방화범이 표시 내용은 다음과 같습니다

enter image description here

은 "크기"열은 응답의 크기를 보여줍니다. 마우스로 "크기"열 레이블 위로 마우스를 가져 가면 응답이 압축 된 경우 응답의 압축 된 크기가 표시됩니다.

이 모든 작업은 Jetty에서 사용할 수있는 GZip 필터를 사용하여 수행되었습니다. 그런 다음 web.xml에서 GZip 필터 선언을 제거하고 Jetty를 다시 시작한 다음 테스트를 반복했습니다. 응답 시간은 GZip 압축이 작동하지 않았 음을 분명히 나타냅니다.

여러 번의 시행 착오를 거친 후, "요청 헤더"섹션의 방화범을 빌려 "수락"헤더의 값을 확인합니다. 여기에 "application/xml"및 "text/xml"과 같은 값이 있지만 GZIp 필터의 init 매개 변수 "mimeTypes"에는 "text/xml"(및 "application was missing"/xml "). 그것은과 같이 구성되었다 :

<filter> 
     <filter-name>GzipFilter</filter-name> 
     <filter-class>org.eclipse.jetty.servlets.GzipFilter</filter-class> 
     <init-param> 
     <param-name>mimeTypes</param-name> 
     <param-value>text/html,text/plain,text/xml,application/xhtml+xml,text/css,application/javascript,image/svg+xml,application/json,application/xml; charset=UTF-8</param-value> 
     </init-param> 
    </filter> 
    <filter-mapping> 
     <filter-name>GzipFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

과 같이 목록에 "응용 프로그램/XML"값을 추가 한 후 :

<filter> 
     <filter-name>GzipFilter</filter-name> 
     <filter-class>org.eclipse.jetty.servlets.GzipFilter</filter-class> 
     <init-param> 
     <param-name>mimeTypes</param-name> 
     <param-value>text/html,text/plain,text/xml,application/xhtml+xml,application/xml,text/css,application/javascript,image/svg+xml,application/json,application/xml; charset=UTF-8</param-value> 
     </init-param> 
    </filter> 
    <filter-mapping> 
     <filter-name>GzipFilter</filter-name> 
     <url-pattern>/*</url-pattern> 
    </filter-mapping> 

나는 내 이전 테스트를 redid과의보고 된 크기 지금 충분히 확인

또한

enter image description here

지금,보고 된 응답 헤더는 값으로 "콘텐츠 인코딩"라는 추가 필드를 포함하는 것을 알 수 : 반응은 훨씬 작았 "gzip".

기본적으로 아이디어는 요청 "수락"헤더에서 어떤 종류의 값을 보내고 그 값이 모두 GZip 필터의 "mimeTypes"초기화 매개 변수에 구성되어 있는지 확인하는 것입니다.

1
부두 9.3에

:

  1. 편집 jetty.conf과 "부두 - gzip.xml"

  2. 편집 start.ini와 "--module = 서블릿"

    를 추가 xml 파일을 포함
  3. jetty-gzip.xml을 편집하고 원하는 MIME 유형을 구성하십시오.

  4. 부두를 다시 시작하고 다시 테스트하십시오.