Computer >> 컴퓨터 >  >> 프로그래밍 >> 프로그래밍

웹 프로그래밍에 꼭 알아야 할 핵심 HTTP 응답 헤더 14가지 총정리

웹 서버는 브라우저로 응답을 보낼 때 본문(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 응답 헤더는 단순한 부가 정보가 아니라 웹 애플리케이션의 성능, 보안, 사용자 경험에 직접적인 영향을 미치는 핵심 요소입니다. 위 헤더들의 역할을 정확히 이해하고 적절히 활용하면 캐시 최적화, 리다이렉션 처리, 파일 다운로드 구현 등 다양한 기능을 효율적으로 개발할 수 있습니다.