본문으로 건너뛰기
Ink·tab

1xx~5xx · 자주 쓰는 헤더

401 vs 403, Cache-Control 옵션, CORS preflight 헤더 — 즉답.

  • 100ContinueRFC 9110 §15.2.1

    POST 의 큰 본문을 보내기 전에 서버가 Expect: 100-continue 헤더를 받고 '계속 보내라' 신호. 클라이언트가 본문을 미리 안 보내고 헤더만 먼저 — 거부될 본문 절약.

  • 101Switching ProtocolsRFC 9110 §15.2.2

    WebSocket · HTTP/2 업그레이드 응답. Upgrade 헤더 받은 후 같은 connection 위에서 다른 프로토콜로 전환.

  • 103Early HintsRFC 8297

    메인 응답 도착 전에 미리 보내는 힌트 (Link: rel=preload). 브라우저가 CSS · JS 를 미리 fetch 시작 — TTFB 개선.

  • 200OKRFC 9110 §15.3.1

    요청이 성공했고 본문이 따라 옵니다. GET / POST / PUT 모두 사용. 응답 본문은 항상 채울 책임.

  • 201CreatedRFC 9110 §15.3.2

    리소스가 새로 만들어졌습니다. 보통 Location 헤더로 새 리소스 URL 을 함께. POST /users 의 정상 응답.

  • 202AcceptedRFC 9110 §15.3.3

    수신 됐지만 처리는 비동기. 백그라운드 잡 큐 · 메일 발송 · 영상 인코딩. 결과 조회용 폴링 URL 함께 줘야.

  • 204No ContentRFC 9110 §15.3.5

    성공이지만 본문 없음. PUT · DELETE · 폼 제출 후 redirect 자리에. Content-Length: 0 권장.

  • 206Partial ContentRFC 9110 §15.3.7

    Range 요청 응답 일부. 비디오 streaming · 큰 파일 분할 다운로드. Content-Range 헤더로 어느 구간인지 명시.

  • 301Moved PermanentlyRFC 9110 §15.4.2

    영구 이동. 검색엔진과 브라우저가 새 URL 을 캐시. 도메인 이전 / HTTPS 강제 시 정석. 메서드 변환 가능 — 보존 필요면 308.

  • 302FoundRFC 9110 §15.4.3

    임시 이동. 캐시 안 함. A/B 테스트 · 로그인 분기 · 일시 redirect. POST → GET 변환됨 (legacy 호환).

  • 304Not ModifiedRFC 9110 §15.4.5

    조건부 GET 의 캐시 일치. If-None-Match · If-Modified-Since 와 함께. 본문 없이 헤더만 — 대역폭 절약 핵심.

  • 307Temporary RedirectRFC 9110 §15.4.8

    302 와 같지만 메서드 보존. POST 가 다음 URL 에서도 POST. 임시 이동 + 메서드 유지.

  • 308Permanent RedirectRFC 9110 §15.4.9

    301 과 같지만 메서드 보존. 영구 이동 + 메서드 유지. REST API 의 정석 영구 redirect.

  • 400Bad RequestRFC 9110 §15.5.1

    요청 자체가 잘못. JSON 파싱 실패 · 잘못된 메서드 · 형식 오류. 4xx 의 default — 다른 코드가 안 맞을 때.

  • 401UnauthorizedRFC 9110 §15.5.2

    인증 필요. WWW-Authenticate 헤더로 어떤 방식 (Basic · Bearer · Digest) 인지 알림. 인증 자체가 없거나 실패 (token 만료).

  • 402Payment RequiredRFC 9110 §15.5.3

    사용 거의 안 됨. Stripe 등 결제 SaaS 가 카드 거부 시 사용. 표준에선 'reserved'.

  • 403ForbiddenRFC 9110 §15.5.4

    인증은 됐지만 권한 부족. 토큰 유효해도 그 리소스 접근 권한 X. 401 과 헷갈리지 말 것 — 401 은 '누구냐', 403 은 '안 됨'.

  • 404Not FoundRFC 9110 §15.5.5

    리소스 없음. 라우트 자체가 없거나 ID 매칭 안 됨. 권한 노출 회피 시 403 대신 404 도 흔함 (GitHub 패턴).

  • 405Method Not AllowedRFC 9110 §15.5.6

    메서드 불가. 라우트는 있지만 그 메서드 (GET / POST 등) 가 정의 안 됨. Allow 헤더에 허용 메서드 나열 권장.

  • 406Not AcceptableRFC 9110 §15.5.7

    Accept 헤더에 명시한 형식 (예: application/xml) 을 서버가 못 줌. content negotiation 실패. 거의 안 봄.

  • 408Request TimeoutRFC 9110 §15.5.9

    클라이언트가 너무 느려 timeout. 보통 keep-alive idle 만료. 클라이언트가 connection 새로 열고 재시도.

  • 409ConflictRFC 9110 §15.5.10

    현재 상태와 충돌. 같은 이메일 가입 시도, 동시 편집, optimistic lock 위반. 본문에 충돌 사유 기재.

  • 410GoneRFC 9110 §15.5.11

    영구 삭제됨. 404 와 다름 — 의도적으로 '없앴다' 신호. SEO 에서 빠른 deindex 신호.

  • 413Content Too LargeRFC 9110 §15.5.14

    요청 본문이 너무 큼. 업로드 한도 초과. 서버 권장 max size 안내 (Retry-After 또는 본문).

  • 415Unsupported Media TypeRFC 9110 §15.5.16

    Content-Type 미지원. application/x-www-form-urlencoded 만 받는 endpoint 에 application/json 보낸 경우.

  • 418I'm a teapotRFC 2324

    I am a teapot. RFC 2324 의 만우절 농담. 일부 사이트가 봇 차단 신호로 사용 (예전 Google).

  • 422Unprocessable ContentRFC 9110 §15.5.21

    JSON 형식은 맞지만 의미가 잘못. validation 실패. 400 보다 구체적 — Laravel · FastAPI · Rails 가 흔히 사용.

  • 429Too Many RequestsRFC 6585 §4

    rate limit 초과. Retry-After 헤더에 재시도 지연 시간 (초 또는 HTTP date) 명시.

  • 451Unavailable For Legal ReasonsRFC 7725

    법적 사유로 차단 (검열). RFC 7725 — Fahrenheit 451 에서. EU GDPR · 한국 방심위 · 미국 DMCA.

  • 500Internal Server ErrorRFC 9110 §15.6.1

    서버 코드 에러. exception · null pointer · DB 다운. 사용자에게는 일반 메시지, 로그에는 스택 트레이스.

  • 501Not ImplementedRFC 9110 §15.6.2

    메서드 자체를 서버가 모름 (PROPFIND 같은). 405 와 다름 — 405 는 라우트는 있고 메서드만 안 됨.

  • 502Bad GatewayRFC 9110 §15.6.3

    프록시가 upstream 에서 잘못된 응답. nginx · CDN 뒤 origin 이 죽었거나 잘못 응답.

  • 503Service UnavailableRFC 9110 §15.6.4

    서비스 일시 불가. 재시작 · 과부하 · 점검. Retry-After 권장. 503 + Retry-After 면 검색엔진이 재시도.

  • 504Gateway TimeoutRFC 9110 §15.6.5

    프록시가 upstream 응답을 시간 안에 못 받음. 502 와 다름 — 502 는 잘못된 응답, 504 는 응답 없음.

  • 511Network Authentication RequiredRFC 6585 §6

    captive portal — 호텔 · 공항 Wi-Fi 'agree to terms' 페이지로 redirect 시 사용. RFC 6585.

언제 쓰나

API 디버깅 중에 401 과 403 의 차이를 다시 확인할 때, Cache-Control 의 no-cacheno-store 가 어떤 의미인지 즉답이 필요할 때, CSP / HSTS 같은 보안 헤더를 작성하면서 어떤 옵션이 있는지 빠르게 훑을 때.

35 코드 + 17 헤더

상태 코드 35 종 (1xx · 2xx · 3xx · 4xx · 5xx) + 자주 쓰는 헤더 17 종을 검색 / 카테고리 필터로. 각 항목은 한국어 narrative + RFC 인용.

가장 자주 헷갈리는 쌍:

  • 401 vs 403 — 401 은 '누구냐' (인증 자체가 없거나 실패), 403 은 '안 됨' (인증은 됐지만 권한 부족).
  • 302 vs 307 — 둘 다 임시 redirect. 302 는 메서드 변환 가능 (POST → GET), 307 은 메서드 보존. 새 코드는 307 권장.
  • 502 vs 504 — 502 는 upstream 이 잘못된 응답, 504 는 응답 자체가 없음 (timeout).
  • no-cache vs no-store — no-cache 는 캐시는 하되 매번 검증, no-store 는 캐시 자체 안 함.
  • HSTS vs CSP — HSTS 는 HTTPS 강제 (MITM 차단), CSP 는 외부 스크립트 차단 (XSS 방어).

출처

  • RFC 9110 — Semantics
  • RFC 9111 — Caching
  • RFC 6585 — 추가 코드 (428, 429, 511)
  • RFC 7725 — 451
  • RFC 2324 — 418
  • W3C CSP3 · Fetch · Referrer Policy
  • MDN HTTP docs

보안

35 상태 코드 + 17 헤더 메타데이터와 narrative 모두 클라이언트 정적 JSON 번들. 외부 API · CDN 호출 0 — 사내망 / offline 환경에서도 동일하게 동작합니다.

안 맞는 경우

  • HTTP 표준 외 응답 (2xx 끝자리 99 같은 사적 코드) — 본 도구는 표준 코드만. 자체 정의 코드는 백엔드 문서에서 확인.
  • gRPC 상태 코드 — gRPC 의 status code 0~16 은 HTTP 와 별도. 본 도구 미지원.
  • brotli compression dictionary 같은 hot topic — 뉴 헤더는 안정화된 RFC 가 나와야 추가.

외부 호출 0

35 상태 코드 + 17 헤더 메타데이터와 narrative 모두 클라이언트 정적 JSON 으로 번들. 외부 API · CDN 조회 없음 — 사내망 / offline 환경에서도 동일하게 동작합니다.

자주 묻는 질문

401 과 403 의 차이는?
401 = 인증 실패 ('누구냐'). WWW-Authenticate 헤더로 어떤 방식 (Basic · Bearer) 인지 알림. 403 = 인증은 됐지만 권한 부족 ('안 됨'). 같은 토큰으로 다른 사용자 데이터 조회 시도 같은 케이스.
302 와 307 의 차이는?
둘 다 임시 redirect. 302 는 메서드 변환 가능 (POST → GET, legacy 호환). 307 은 메서드 보존 — POST 가 다음 URL 에서도 POST. 새 코드는 307 권장.
Cache-Control 의 no-cache 와 no-store 차이는?
no-cache = 캐시는 하되 매번 서버에 조건부 검증 (If-None-Match → 304). no-store = 캐시 자체를 안 함. 인증 토큰 응답 · 결제 페이지는 no-store, 일반 정적 자원은 no-cache + ETag.
왜 보안 헤더 (HSTS · CSP) 가 필요한가요?
HSTS 는 Man-in-the-middle 차단 (한 번 받으면 브라우저가 자체 HTTPS 강제). CSP 는 XSS 차단 (외부 script 실행 자체 차단). 둘 다 한 줄 헤더로 큰 보안 향상. 미설정 시 securityheaders.com / mozilla observatory 가 즉시 감점.
이 도구가 외부 API 를 호출하나요?
아니요. 35 상태 코드 + 17 헤더 메타데이터와 narrative 모두 클라이언트 정적 JSON. 외부 호출 0 — 사내망 / offline 환경에서도 동일하게 동작합니다.