HTTP 응답의 기본 구조
웹 서버가 HTTP 요청에 응답할 때, 응답은 일반적으로 상태 라인(status line), 여러 개의 응답 헤더(response headers), 하나의 빈 줄, 그리고 실제 문서 순으로 구성됩니다. 전형적인 응답 형태는 다음과 같습니다.
HTTP/1.1 200 OK
Content-Type: text/html
Header2: ...
...
HeaderN: ...
(빈 줄)
<!doctype ...>
<html>
<head>...</head>
<body>
...
</body>
</html>
상태 라인은 HTTP 버전(예시에서는 HTTP/1.1), 상태 코드(예시에서는 200), 그리고 상태 코드에 해당하는 아주 짧은 메시지(예시에서는 OK)로 이루어져 있습니다.
자주 사용되는 HTTP 1.1 응답 헤더 14가지
아래 표는 웹 서버가 브라우저로 되돌려 보내는 가장 유용한 HTTP 1.1 응답 헤더들을 정리한 것입니다. 이 헤더들은 웹 프로그래밍에서 매우 자주 활용됩니다.
| 번호 | 헤더 및 설명 |
|---|---|
| 1 | Allow 서버가 지원하는 요청 방식(GET, POST 등)을 명시합니다. |
| 2 | Cache-Control 응답 문서를 어떤 조건에서 안전하게 캐시할 수 있는지 지정합니다. 값으로 public, private, no-cache 등을 사용할 수 있습니다. public은 누구나 캐시할 수 있다는 뜻이고, private은 특정 단일 사용자만을 위한 문서로 공유되지 않는(private) 캐시에만 저장된다는 의미이며, no-cache는 절대 캐시해서는 안 된다는 뜻입니다. |
| 3 | Connection 브라우저가 지속적인 HTTP 연결을 사용할지 여부를 지시합니다. close는 지속 연결을 사용하지 말라는 의미이며, keep-alive는 지속 연결을 사용하라는 의미입니다. |
| 4 | Content-Disposition 브라우저가 사용자에게 응답 내용을 지정된 파일 이름으로 디스크에 저장할지 묻도록 요청할 수 있습니다. |
| 5 | Content-Encoding 페이지가 전송 과정에서 어떤 방식으로 인코딩되었는지 지정합니다. |
| 6 | Content-Language 문서가 작성된 언어를 나타냅니다. 예를 들어 en, en-us, ko, ru 등이 있습니다. |
| 7 | Content-Length 응답 본문의 바이트 수를 나타냅니다. 이 정보는 브라우저가 지속(keep-alive) HTTP 연결을 사용할 때만 필요합니다. |
| 8 | Content-Type 응답 문서의 MIME(Multipurpose Internet Mail Extension) 타입을 지정합니다. |
| 9 | Expires 콘텐츠가 오래된 것으로 간주되어 더 이상 캐시하지 않아야 하는 시점을 지정합니다. |
| 10 | Last-Modified 문서가 마지막으로 변경된 시각을 나타냅니다. 클라이언트는 이 정보를 활용해 문서를 캐시하고, 이후 요청 시 If-Modified-Since 요청 헤더로 날짜를 전달할 수 있습니다. |
| 11 | Location 상태 코드가 300번대인 모든 응답에 반드시 포함되어야 하는 헤더입니다. 브라우저에 새 문서의 주소를 알려주며, 브라우저는 자동으로 해당 위치에 재접속해 새 문서를 가져옵니다. |
| 12 | Refresh 브라우저가 갱신된 페이지를 얼마나 빨리 다시 요청해야 하는지 지정합니다. 초 단위로 시간을 지정하면 그 시간이 지난 뒤 페이지가 자동으로 새로 고침됩니다. |
| 13 | Retry-After 503(Service Unavailable) 응답과 함께 사용되어, 클라이언트가 언제쯤 요청을 다시 시도할 수 있는지 알려줍니다. |
| 14 | Set-Cookie 해당 페이지와 연관된 쿠키를 지정합니다. |
JSP에서 응답 헤더 설정하기
JSP에서는 내장 객체인 response의 setHeader() 메서드를 사용해 위 헤더들을 직접 제어할 수 있습니다.
response.setHeader("Refresh", "5"); // 5초 후 자동 새로 고침
response.setContentType("text/html;charset=UTF-8"); // MIME 타입과 문자 인코딩 설정
이처럼 HTTP 응답 헤더를 잘 이해하고 활용하면 캐싱 제어, 파일 다운로드 처리, 리다이렉션, 쿠키 설정 등 웹 애플리케이션의 다양한 동작을 세밀하게 제어할 수 있습니다.