JSP로 웹 애플리케이션을 개발하다 보면 클라이언트가 보낸 HTTP 요청 헤더 정보를 확인해야 하는 경우가 자주 있습니다. 이럴 때 HttpServletRequest 객체가 제공하는 getHeaderNames() 메서드를 활용하면 모든 헤더 정보를 간편하게 읽어올 수 있습니다.
getHeaderNames() 메서드는 현재 HTTP 요청에 포함된 헤더 정보를 Enumeration 객체 형태로 반환합니다. Enumeration을 확보한 후에는 표준적인 방식으로 반복문을 순회하면 되는데, hasMoreElements() 메서드로 반복 종료 시점을 판단하고 nextElement() 메서드로 각 헤더의 이름을 차례대로 가져오면 됩니다.
전체 예제 코드
<%@ page import = "java.io.*,java.util.*" %>
<html>
<head>
<title>HTTP 헤더 요청 예제</title>
</head>
<body>
<center>
<h2>HTTP 헤더 요청 예제</h2>
<table width = "100%" border = "1" align = "center">
<tr bgcolor = "#949494">
<th>헤더 이름</th>
<th>헤더 값</th>
</tr>
<%
Enumeration headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()) {
String paramName = (String)headerNames.nextElement();
out.print("<tr><td>" + paramName + "</td>\n");
String paramValue = request.getHeader(paramName);
out.println("<td> " + paramValue + "</td></tr>\n");
}
%>
</table>
</center>
</body>
</html>
코드 동작 방식
스크립틀릿(scriptlet) 부분에서는 먼저 request.getHeaderNames()를 호출해 모든 헤더 이름이 담긴 Enumeration을 얻습니다. 그다음 while 반복문 안에서 hasMoreElements()로 아직 읽을 요소가 남아 있는지 확인하고, nextElement()로 헤더 이름을 하나씩 꺼낸 뒤 request.getHeader(paramName)을 호출해 해당 헤더의 값을 조회합니다. 마지막으로 out.print()와 out.println()을 사용해 테이블의 행(<tr>)과 셀(<td>)을 동적으로 생성하여 화면에 출력합니다.
위 코드를 main.jsp 파일로 저장한 뒤 서버에 배포하고 브라우저에서 접속하면 다음과 같이 요청 헤더 목록이 테이블 형태로 출력됩니다.
HTTP 헤더 요청 예제 실행 결과
| 헤더 이름 | 헤더 값 |
|---|---|
| accept | */* |
| accept-language | en-us |
| user-agent | Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; MS-RTC LM 8) |
| accept-encoding | gzip, deflate |
| host | localhost:8080 |
| connection | Keep-Alive |
| cache-control | no-cache |
주요 HTTP 헤더의 의미
- accept: 클라이언트가 수신 가능한 콘텐츠 타입(MIME 타입)을 나타냅니다.
- accept-language: 클라이언트가 선호하는 언어를 지정합니다.
- user-agent: 요청을 보낸 브라우저와 운영체제 정보를 포함합니다.
- accept-encoding: 클라이언트가 지원하는 압축 방식(gzip, deflate 등)을 나타냅니다.
- host: 요청 대상 서버의 호스트명과 포트 번호입니다.
- connection: 연결 유지 여부(Keep-Alive 등)를 지정합니다.
- cache-control: 캐시 동작 방식을 제어합니다.
이처럼 getHeaderNames()와 getHeader() 메서드를 조합하면 별도의 설정 없이도 들어오는 모든 HTTP 요청 헤더를 동적으로 조회하고 화면에 출력할 수 있습니다. 디버깅이나 클라이언트 요청 분석 작업에서 매우 유용하게 활용되는 기법이므로 꼭 익혀두시기 바랍니다.