HTTP 상태 코드 & 응답 헤더: 완전 참조 가이드
HTTP 상태 코드와 헤더를 이해하는 것은 웹 개발자, SEO 전문가 및 시스템 관리자에게 필수적입니다. 이 참조 가이드는 현대 웹 통신에서 사용되는 가장 중요한 상태 코드와 헤더를 다룹니다.
1. HTTP 상태 코드 빠른 참조
상태 코드는 첫 번째 숫자에 따라 다섯 가지 클래스로 분류됩니다.
1xx: 정보 제공
- 101 Switching Protocols: 서버가 프로토콜 전환에 동의함 (예: WebSocket으로 업그레이드).
2xx: 성공
- 200 OK: 요청이 성공함.
- 201 Created: 요청이 성공했으며 새로운 리소스가 생성됨.
- 204 No Content: 요청은 성공했으나 응답할 본문 내용이 없음.
3xx: 리다이렉션
- 301 Moved Permanently: 리소스가 영구적으로 새로운 URL로 이동함.
- 302 Found: 리소스가 일시적으로 다른 URL에 있음.
- 304 Not Modified: 캐싱용; 리소스가 변경되지 않았음을 나타냄.
4xx: 클라이언트 오류
- 400 Bad Request: 잘못된 문법 등으로 인해 서버가 요청을 처리할 수 없음.
- 401 Unauthorized: 인증이 필요함.
- 403 Forbidden: 서버가 요청을 이해했으나 승인을 거부함.
- 404 Not Found: 요청한 리소스를 찾을 수 없음.
- 429 Too Many Requests: 지정된 시간 동안 너무 많은 요청을 보냄 (속도 제한).
5xx: 서버 오류
- 500 Internal Server Error: 서버에서 예기치 않은 오류가 발생함.
- 502 Bad Gateway: 게이트웨이 또는 프록시 서버가 업스트림 서버로부터 잘못된 응답을 받음.
- 503 Service Unavailable: 서버가 현재 요청을 처리할 수 없음 (유지보수 또는 과부하).
- 504 Gateway Timeout: 업스트림 서버로부터 제때 응답을 받지 못함.
2. 필수 HTTP 응답 헤더
헤더는 응답 또는 서버에 대한 메타데이터를 제공합니다.
캐시 제어: Cache-Control
브라우저 및 중간 캐시(CDN 등)가 리소스를 저장하는 방식을 제어합니다.
public, max-age=31536000, immutable: 버전이 지정된 정적 자산(JS, CSS)에 이상적임.no-store: 아무것도 캐시하지 않음 (민감한 데이터용).no-cache: 캐시를 사용하기 전에 서버에서 재검증을 거쳐야 함.
보안: Strict-Transport-Security (HSTS)
브라우저에 HTTPS를 통해서만 사이트에 접속하도록 지시합니다.
- 예:
max-age=63072000; includeSubDomains; preload
세션 관리: Set-Cookie
서버에서 사용자 에이전트로 쿠키를 전송합니다.
- 예:
id=abc; Max-Age=3600; Secure; HttpOnly; SameSite=Lax- HttpOnly: 자바스크립트의 쿠키 접근을 방지 (XSS 완화).
- Secure: HTTPS를 통해서만 쿠키를 전송.
- SameSite: 교차 사이트 쿠키 동작 제어 (Lax, Strict 또는 None).
콘텐츠 협상: Content-Type & Accept-Encoding
- Content-Type: 리소스의 미디어 유형을 나타냄 (예:
text/html,application/json). - Accept-Encoding: 클라이언트가 지원하는 압축 방식을 서버에 알림 (예:
gzip,br).
3. 비교표: 301 vs. 302 리다이렉션
| 기능 | 301 영구 이동 | 302 임시 이동 |
|---|---|---|
| SEO 영향 | 링크 자산(PageRank) 전달 | 링크 자산 전달하지 않음 |
| 브라우저 캐싱 | 기본적으로 캐시됨 | 기본적으로 캐시되지 않음 |
| 주요 사례 | 사이트 이전, URL 영구 변경 | 유지보수, 일시적인 프로모션 |
FAQ: 일반적인 HTTP 문제
Q: 로그인했는데도 403 Forbidden 오류가 발생하는 이유는 무엇인가요?
A: 사용자에게 해당 리소스에 대한 특정 권한/역할이 없거나, CSRF 토큰이 일치하지 않는 경우에 발생합니다.
Q: 401과 403의 차이점은 무엇인가요?
A: 401 Unauthorized는 "당신이 누구인지 모르겠다"(로그인 필요)는 뜻입니다. 403 Forbidden은 "당신이 누구인지 알지만, 접근이 허용되지 않는다"는 뜻입니다.
Q: 502 Bad Gateway를 어떻게 해결하나요?
A: 대개 서버 측 문제입니다. 백엔드 애플리케이션(Node.js, Python 등)이 실행 중인지, 리버스 프록시(Nginx/Apache)가 올바른 위치를 가리키고 있는지 확인하세요.
관련 도구
- HTTP 헤더 분석기: 모든 URL의 헤더를 검사하고 분석합니다.
- Cache-Control 빌더: 최적화된 캐시 정책을 생성합니다.
- 상태 코드 확인 도구: API 또는 웹사이트의 응답 코드를 검증합니다.