JSP 상태코드 500 출력시 출력내용이 아닌 Explorer 내용 보여지는 문제
JSP/Servlet에서 예를 들어 Tomcat의 내부 오류(Internal Server Error) 처리시 출력한 내용이 아닌 Explorer 자체의 오류 내용이 출력됩니다.



다음의 nullEx.jsp 페이지는 java.lang.NullPointerException 이 발생하도록 작성되었고 예외가 발생했을 때 errorPage 옵션을 통해 exception.jsp 페이지 처리내용을 사용자에게 보여주도록 설정했습니다.

nullEx.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>    
<%@ page errorPage="/exception.jsp" %>
      
<!DOCTYPE html>
<html>
<head>
      <meta charset="UTF-8">
</head>
<body>
      <%
            String nullStr = null;
            System.out.println(nullStr.toString());
      %>
</body>
</html>
cs


exception.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"  pageEncoding="UTF-8"%>    
<%@ page isErrorPage="true" %>
      
<!DOCTYPE html>
<html>
<head>
      <meta charset="UTF-8">
</head>
<body>
서버에 문제가 발생하였습니다.
문제가 계속 되면 고객센터에 문의해주시기 바랍니다.
 
 
</body>
</html>
cs


다음은 크롬에서 nullEx.jsp 페이지를 호출했을 때의 결과입니다. 예상대로라면 Internet Explorer에서도 같은 결과가 나와야 하지만 글의 처음 캡쳐 내용과 같이 Explorer의 내용이 표시됩니다.





문제 원인
문제의 원인으로는 Internet Explorer의 경우 보안상의 문제로 서버의 내부 오류가 발생했을때 예기치 않게 서버 내부의 Stack 정보나 사용자 정보등이 표시되는 것을 방지하기 위해 HTTP 상태코드 400 ~ 500 등의 오류가 리스폰스 되었을 때 HTTP 응답 메시지의 데이터 크기가 512 byte 이하인 경우 자체적인 오류 메시지를 표시하도록 되어있기 때문입니다.

HTTP 응답 상태코드가 400 ~ 500인 경우 이면서 HTTP 메시지 크기가 512 byte 이하인 경우.

즉 실제로 응답된 내용은 서버에서 출력한 오류 내용이지만 Internet Explorer 자체적으로 해당 내용을 표시하지 않고 자신만의 오류 내용을 보여주는 것입니다.



해결 방법
해경 방법으로는 크게 세 가지가 있습니다.

첫번째로는 JSP나 Servlet에서 응답 코드를 200으로 바꾸어 응답하는 것입니다.
<%
      response.setStatus(200);                                                            
%>
cs


두번째로는 사용자에게는 보이지 않는 HTML 주석등을 활용해 출력 내용을 512byte 이상으로 늘림으로써 Internet Explorer가 자체적인 오류 내용을 보여주는것이 아닌 서버에서 응답한 오류 내용을 표시하도록 하는 방법입니다. 다음은 JSP 에러 페이지에 html 주석 내용을 추가 한 후에 Explorer에서 개발자 모드로 확인한 내용입니다.





세번째로는 그다지 추천하는 방법은 아닙니다. 이는 End User인 사용자가 브라우저에서 설정을 해주어야 하는 부분입니다.

익스플로러의 인터넷 옵션을 열어줍니다.



고급탭에서 HTTP 오류 메시지 표시를 체크 해제합니다. 그러나 사용자를 불편하게 해서는 안돼! 권장하는 방법은 아닙니다.

블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

,