2009-06-01 5 views
1

AJP 프로토콜을 통해 Tomcat 내부에서 실행되는 서블릿에 대한 Apache 프록시 요청에 대한 일반적인 설정이 있습니다.아파치가 jsp 페이지를 "text/plain"으로 잘못 변환합니다.

우리는이 설정을 아파치 2.0.46/Tomcat 5.0.28에서 문제없이 실행했지만 최근 아파치 2.2.3/Tomcat 5.5로 업데이트했습니다.

우리가 간헐적으로 아파치가 서블릿이 제공하는 페이지의 "Content-Type"HTTP 헤더를 "text/html"에서 "text/html"로 변환하는 것을 간헐적으로 (3 번에 한 번) 일반 "으로 설정하면 브라우저가 HTML 소스를 렌더링하는 대신 표시합니다.

이전에 이런 종류의 동작을 본 사람이 있습니까? 원인을 알 수 있습니까? Tomcat/Apache의 이전 버전이 더 용서할 수있는 서블릿 코드에서 뭔가를하고 있다고 생각합니다.

업데이트 : 나는 아파치가 헤더를 변경하고 있음을 확인했습니다. Tomcat을 직접 탐색하면 문제가 발생하지 않습니다.

답변

0

확인.

우리는 HTTP 요청의 결과로 직렬화 된 자바 객체 작성이 같은 일을했다 :

DeflaterOutputStream dos = new DeflaterOutputStream(response.getOutputStream()); 
ObjectOutputStream oos = new ObjectOutputStream(dos); 
response.setContentType("application/x-java-serialized-object"); 
oos.writeObject(someObject); 

이었다 일어나고있는 것 같았다 무엇을 나는 서블릿 코드의 버그했다, 그것을 알아 냈다 DeflaterOutputStreamObjectOutputStream은 나중에 응답 객체의 출력 스트림에 연결될 때 3 ~ 4 개의 요청을 가비지 수집하므로 이로 인해 Apache에서 혼동을 일으키고 헤더를 다시 작성하게됩니다.

나는 함께 위의 대체 :

ByteArrayOutputStream byteStream = new ByteArrayOutputStream(); 
DeflaterOutputStream dos = new DeflaterOutputStream(byteStream); 
oos = new ObjectOutputStream(dos); 
response.setContentType("application/x-java-serialized-object"); 
oos.writeObject(someObject); 
oos.flush(); 
dos.finish(); 
byteStream.writeTo(response.getOutputStream()); 

하고 문제가 사라했다.

다음 링크

비슷한 문제에 대해 설명하는 것 : 그들이 섬기는 내용의

0

이 문제가 간헐적으로 발생하는 경우 Tomcat 또는 httpd의 잘못된 구성이 아닌 서블릿 코드에있는 것이 거의 확실합니다. HTTP 헤더의 내용을 인쇄 할 수있는 로깅 기능이 있습니까?

문제를 좀 더 격리 시키려면 httpd를 우회하여 페이지의 Tomcat URL로 직접 이동하십시오.

나는이 특정한 행동을 본적이 없기 때문에 더 구체적 일 수는 없다.

0

간헐적으로 일부 페이지는이 동작을 나타내지 만 다른 페이지는 그렇지 않거나 때로는 동작을 나타내거나 때때로 그렇지 않은 페이지가 있다는 것을 의미합니까?

AJP 계층에 로깅을 첨부하여 해당 수준에서 HTTP 헤더를 로깅 할 수 있으므로 Apache 또는 Tomcat이 가짜 헤더를 추가하는지 확인할 수 있습니까?

+0

문제는 앱의 모든 페이지에 영향을 미치는 것 같습니다. – AndrewR

0

클러스터로 다시 프록시 하시겠습니까? 어쩌면 서버 중 하나가 잘못 구성되었을 수 있습니다.

5

일부 웹 어플리케이션이 제대로 설정하지 MIME 형식을,하지만 여전히 제대로 때 작동 할 수 브라우저와 같은 클라이언트 응용 프로그램이 컨텐트 유형을 해석 할 수 있기 때문에 독립형으로 제공됩니다. 그러나 아파치에서 제공 될 때 아파치는 기본 유형의 텍스트/일반을 제공하기 때문에 이러한 앱은 올바르게 작동하지 않습니다.

해결책은 이러한 웹 애플 리케이션을위한 아파치 가상 호스트에 DefaultType 없음 라인을 추가하는 것입니다 : 나는 또한 직면 한 http://patternbuffer.wordpress.com/2011/11/30/mime-type-issue-with-apache-mod_jk-and-mod_proxy-serving-plain-text/

0

: 내 블로그 게시물에서

DefaultType None 

http://httpd.apache.org/docs/2.2/mod/core.html#defaulttype

그것이 해결 된 동일한 문제. 하나의 폴더에서만 문제가 발생하면 요청/응답을 차단하고 tomcat에 대한 사용자 정의 요청/응답을 만드는 서블릿이 있습니다. Tomcat 7.0.x