자바 고성능 웹 개발(5)-GZIP 압축
6386 단어 자바
명세서 8.TOMCAT 설정 명세서
<Connector port ="80" maxHttpHeaderSize ="8192"
maxThreads ="150" minSpareThreads ="25" maxSpareThreads ="75"
enableLookups ="false" redirectPort ="8443" acceptCount ="100"
connectionTimeout ="20000" disableUploadTimeout ="true" URIEncoding ="utf-8"
compression="on"
compressionMinSize="2048"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml" />
우 리 는 커 넥 터 에 다음 과 같은 몇 가지 속성 을 추 가 했 습 니 다.그들의 의 미 는 다음 과 같 습 니 다.
compression="on"압축 기능 열기
compression MinSize="2048"압축 된 출력 내용 크기 를 사용 합 니 다.기본 값 은 2KB 입 니 다.
noCompressionUserAgent="gozilla,traviata"아래 브 라 우 저 에 압축 을 사용 하지 않 습 니 다.
compressableMimeType="text/html,text/xml,image/png"압축 형식
때때로,우 리 는 server.xml 를 설정 할 수 없습니다.예 를 들 어 우리 가 다른 사람의 공간 만 빌 렸 을 뿐 GZIP 을 사용 하지 않 았 다 면,우 리 는 프로그램 을 사용 하여 GZIP 기능 을 사용 해 야 합 니 다.압축 이 필요 한 파일 을 지정 한 폴 더 에 넣 고 필 터 를 사용 하여 이 폴 더 에 있 는 파일 에 대한 요청 을 걸 러 냅 니 다.
목록 9.사용자 정의 필터 압축 GZIP
// gzipCategory
@WebFilter(urlPatterns = { "/gzipCategory/*" })
public class GZIPFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
String parameter = request.getParameter("gzip");
// Accept-Encoding
HttpServletRequest s = (HttpServletRequest)request;
String header = s.getHeader("Accept-Encoding");
//"1".equals(parameter) , gzip=1, ,
if ("1".equals(parameter) && header != null && header.toLowerCase().contains("gzip")) {
HttpServletResponse resp = (HttpServletResponse) response;
final ByteArrayOutputStream buffer = new ByteArrayOutputStream();
HttpServletResponseWrapper hsrw = new HttpServletResponseWrapper(
resp) {
@Override
public PrintWriter getWriter() throws IOException {
return new PrintWriter(new OutputStreamWriter(buffer,
getCharacterEncoding()));
}
@Override
public ServletOutputStream getOutputStream() throws IOException {
return new ServletOutputStream() {
@Override
public void write(int b) throws IOException {
buffer.write(b);
}
};
}
};
chain.doFilter(request, hsrw);
byte[] gzipData = gzip(buffer.toByteArray());
resp.addHeader("Content-Encoding", "gzip");
resp.setContentLength(gzipData.length);
ServletOutputStream output = response.getOutputStream();
output.write(gzipData);
output.flush();
} else {
chain.doFilter(request, response);
}
}
// GZIP
private byte[] gzip(byte[] data) {
ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(10240);
GZIPOutputStream output = null;
try {
output = new GZIPOutputStream(byteOutput);
output.write(data);
} catch (IOException e) {
} finally {
try {
output.close();
} catch (IOException e) {
}
}
return byteOutput.toByteArray();
}
……
}
이 프로그램의 주 된 사상 은 응답 스 트림 을 쓰기 전에 응답 하 는 바이트 데 이 터 를 GZIP 압축 하 는 것 입 니 다.모든 브 라 우 저가 GZIP 압축 해 제 를 지원 하 는 것 이 아니 기 때문에 브 라 우 저가 GZIP 압축 해 제 를 지원 하면 요청 헤더 의 Accept-Encoding 에 gzip 를 포함 합 니 다.이것 은 서버 브 라 우 저 에 GZIP 압축 해 제 를 지원 하 는 것 을 알려 주 는 것 입 니 다.따라서 프로그램 으로 압축 을 제어 하면 안전 을 위해 서 는 브 라 우 저가 accept-encoding:gzip 헤 더 를 보 낼 지 여 부 를 판단 해 야 합 니 다.이 헤 더 를 포함 하고 있 으 면 압축 을 실행 합 니 다.압축 전후의 상황 을 검증 하기 위해 Firebug 모니터링 요청 과 응답 헤 더 를 사용 합 니 다.
목록 10.압축 전 요청
GET /testProject/gzipCategory/test.html HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Host: localhost:9090
Connection: Keep-Alive
목록 11.압축 되 지 않 은 응답
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
ETag: W/"5060-1242444154000"
Last-Modified: Sat, 16 May 2009 03:22:34 GMT
Content-Type: text/html
Content-Length: 5060
Date: Mon, 18 May 2009 12:29:49 GMT
목록 12.압축 된 응답
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
ETag: W/"5060-1242444154000"
Last-Modified: Sat, 16 May 2009 03:22:34 GMT
Content-Encoding: gzip
Content-Type: text/html
Content-Length: 837
Date: Mon, 18 May 2009 12:27:33 GMT
압축 된 데 이 터 는 압축 전 데이터 보다 훨씬 작 아진 것 을 볼 수 있다.압축 된 응답 헤더 에는 Content-Encoding:gzip 이 포함 되 어 있 습 니 다.동시에 Content-Length 는 데 이 터 를 되 돌려 주 는 크기 를 포함 합 니 다.GZIP 압축 은 중요 한 기능 이다.앞에서 언급 한 것 은 단일 서버 에 대한 압축 최적화 이다.높 은 병발 상황 에서 여러 개의 Tomcat 서버 전에 역방향 프 록 시 기술 을 사용 하여 병발 도 를 높 여야 한다.현재 비교적 핫 한 역방향 프 록 시 는 Nginx(이것 은 후속 글 에서 상세 하 게 소개 할 것 이다)이다.Nginx 의 HTTP 설정 부분 에 다음 설정 을 추가 합 니 다.
목록 13.Nginx 의 GZIP 설정
gzip on;
gzip_min_length 1000;
gzip_buffers 4 8k;
gzip_types text/plain application/x-javascript text/css text/html application/xml;
Nginx 는 더 높 은 성능 을 가지 고 있 기 때문에 이 설정 을 이용 하면 성능 을 더욱 향상 시 킬 수 있 습 니 다.고성능 서버 에서 이 설정 은 매우 유용 할 것 이다.
오리지널 글 전재 출처 표시
자바 튜 토리 얼 네트워크 편집 발표:본 시리즈 의 글 이 당신 의 개인 성장 과 발전 에 도움 이 되 기 를 바 랍 니 다.
자바 초보 입문,개발 도구 부터 자바 진급,고급 프로 그래 밍,자바 튜 토리 얼 네트워크 는 자바 프로 그래 밍 의 모든 자 료 를 거의 포함 하고 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.