웹 서버는 브라우저로 응답을 보낼 때 본문(body)뿐만 아니라 다양한 HTTP 응답 헤더(response header)를 함께 전달합니다. 이 헤더들은 캐싱, 콘텐츠 형식 지정, 리다이렉션, 쿠키 설정 등 웹 애플리케이션의 동작을 제어하는 데 필수적인 정보를 담고 있습니다.
다음은 웹 프로그래밍에서 가장 자주 활용되는 HTTP 1.1 응답 헤더들을 정리한 목록입니다.
1. Allow
서버가 지원하는 요청 방식(method)을 명시합니다. 예를 들어 GET, POST 등 어떤 메서드를 허용하는지 브라우저에 알려줍니다.
2. Cache-Control
응답 문서를 언제, 어떤 조건에서 안전하게 캐시할 수 있는지 지정합니다. 주요 값은 다음과 같습니다.
- public — 문서를 캐시할 수 있음
- private — 단일 사용자를 위한 문서로, 공유되지 않는 개인 캐시에만 저장 가능
- no-cache — 문서를 절대 캐시하지 않아야 함
3. Connection
브라우저가 지속적(persistent) HTTP 연결을 사용할지 여부를 지시합니다. close 값은 지속 연결을 사용하지 않도록 하며, keep-alive 값은 연결을 유지하도록 합니다.
4. Content-Disposition
브라우저가 화면에 표시하는 대신, 사용자에게 응답 내용을 지정된 파일 이름으로 디스크에 저장하도록 요청할 수 있습니다. 파일 다운로드 기능을 구현할 때 자주 사용됩니다.
5. Content-Encoding
페이지가 전송 과정에서 어떻게 인코딩되었는지 나타냅니다. 예를 들어 gzip 압축 여부 등이 여기에 해당합니다.
6. Content-Language
문서가 작성된 언어를 의미합니다. en(영어), en-us(미국 영어), ru(러시아어), ko(한국어) 등의 값을 가질 수 있습니다.
7. Content-Length
응답 본문의 바이트 수를 나타냅니다. 이 정보는 브라우저가 지속적(keep-alive) HTTP 연결을 사용하는 경우에 특히 필요합니다.
8. Content-Type
응답 문서의 MIME(Multipurpose Internet Mail Extension) 타입을 지정합니다. 예를 들어 text/html, application/json, image/png 등이 있으며, 브라우저가 콘텐츠를 올바르게 해석하는 기준이 됩니다.
9. Expires
콘텐츠가 만료되어 더 이상 캐시해서는 안 되는 시점을 지정합니다. 이 시각이 지나면 브라우저나 프록시는 새로운 응답을 요청해야 합니다.
10. Last-Modified
문서가 마지막으로 변경된 시각을 나타냅니다. 클라이언트는 이 정보를 이용해 문서를 캐시하고, 이후 요청 시 If-Modified-Since 요청 헤더에 날짜를 담아 보내 변경 여부를 확인할 수 있습니다. 이를 통해 불필요한 데이터 전송을 줄일 수 있습니다.
11. Location
상태 코드가 300번대(리다이렉션)인 모든 응답에 포함되어야 하는 헤더입니다. 새 문서의 주소를 브라우저에 알려주며, 브라우저는 해당 위치로 자동으로 재접속하여 새 문서를 가져옵니다.
12. Refresh
브라우저가 갱신된 페이지를 다시 요청해야 하는 시점을 지정합니다. 초 단위로 시간을 설정하면 해당 시간이 지난 후 페이지가 자동으로 새로 고침됩니다.
13. Retry-After
503(Service Unavailable) 응답과 함께 사용하여, 클라이언트가 얼마 후에 요청을 다시 시도할 수 있는지 알려줍니다. 서버 과부하나 점검 상황에서 유용하게 활용됩니다.
14. Set-Cookie
해당 페이지와 연관된 쿠키를 지정합니다. 로그인 세션 유지, 사용자 설정 저장 등 다양한 용도로 사용됩니다.
마무리
HTTP 응답 헤더는 단순한 부가 정보가 아니라 웹 애플리케이션의 성능, 보안, 사용자 경험에 직접적인 영향을 미치는 핵심 요소입니다. 위 헤더들의 역할을 정확히 이해하고 적절히 활용하면 캐시 최적화, 리다이렉션 처리, 파일 다운로드 구현 등 다양한 기능을 효율적으로 개발할 수 있습니다.