selfstarter

apache gzip filter 설정 본문

Server/Spring

apache gzip filter 설정

selfstarter 2019. 10. 9. 17:37

apach gzip filter 설정

apache gzip filter

  • apache gzip설정으로 전달 파일 압축 완료

  • http body에 parameter를 압축하여 전달할 수도 있다.

  • 기본설정인 gzip 압축과 parameter 압축을 구분하기 위해 parameter 압축을 할 때 Content-Encoding을 gzip으로 설정한다

  • 서버에서 filter에서 Content-Encoding 이 gzip인지 체크한다

  • parameter를 압축해서 받으면 압축된 상태이므로 압축을 해제해야한다. 이 때 request의 InputStream을 가져오면 request Buffer가 비게되므로 InputStream을 상속받는 request Wrapper class를 만들어서 압축해제한 데이터를 저장한다.

  • response도 Content-Encoding을 gzip으로 설정하기 위해 responseWrapper class 를 생성한다.

  • doFilter에 생성한 request, response 객체를 전달한다.

  • 참고 사이트 : request 생성, response 생성

    
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
          HttpServletRequest httpRequest = (HttpServletRequest) request;
          HttpServletResponse httpResponse = (HttpServletResponse) response;
          String acceptEncoding = httpRequest.getHeader(HttpHeaders.ACCEPT_ENCODING);
          String contentEncoding = httpRequest.getHeader(HttpHeaders.CONTENT_ENCODING);
    
          if (acceptEncoding.indexOf("gzip") >= 0 && contentEncoding.indexOf() >= 0) {
                  // GZIPHttpServletRequestWrapper 생성자에서 압축 푼 데이터를 저장한다
                  GZIPHttpServletRequestWrapper gzipRequest = new GZIPHttpServletRequestWrapper(httpResponse); 
                  GZIPHttpServletResponseWrapper gzipResponse = new GZIPHttpServletResponseWrapper(httpResponse);
                  chain.doFilter(gzipRequest, gzipResponse);
                  gzipResponse.finish();
                  return;
          }
          chain.doFilter(request, response);
      }
Comments