모든 HTTP 상태 코드를 해설해요 — 의미, 원인, 해결 방법. 개발자와 사이트 방문자 모두를 위한 자료예요.
401 Unauthorized는 인증이 필요하다는 뜻이에요 — 서버가 당신이 누구인지 몰라요. 보통 로그인을 요청하는 WWW-Authenticate 헤더가 함께 와요. 403 Forbidden은 서버가 당신이 누구인지 알지만(또는 인증이 문제가 아니지만) 권한이 없다는 뜻이에요. 401은 '신분증을 보여 주세요', 403은 '신분은 알지만 목록에 없어요'라고 생각하면 돼요.
502는 프록시, 로드 밸런서, 또는 CDN이 상류 서버로부터 유효하지 않은 응답을 받았을 때 나타나요. 일반적인 원인: 상류 서버 크래시, 과부하, 요청 처리 중 재시작, 또는 잘못된 HTTP 헤더 반환. 프록시 자체는 정상이에요 — 문제는 프록시가 통신하려는 대상이에요. 애플리케이션 서버 로그를 확인하고 필요하면 재시작하세요.
301 Moved Permanently는 브라우저와 검색 엔진에 리소스가 영구적으로 이동했다고 알려요 — 북마크를 업데이트하고 링크 에퀴티를 이전해야 해요. 302 Found는 임시예요 — 클라이언트는 원래 URL을 계속 사용해야 해요. SEO 목적에서는 영구 URL 변경에 항상 301을 사용하세요. 영구 이동에 302를 실수로 사용하면 순위 신호가 분산되고 전파가 느려질 수 있어요.
418은 RFC 2324(1998)의 만우절 농담이에요 — Hyper Text Coffee Pot Control Protocol이죠. 전제: 찻주전자인 서버는 이 코드로 커피 끓이기를 거부해야 한다는 거예요. 농담임에도 IANA 레지스트리에 남아 웹 개발의 전통이 됐어요. 일부 서버에서 봇이나 원치 않는 자동화를 유머러스하게 거부하는 데 사용해요.
429는 속도 제한을 초과했다는 뜻이에요 — 너무 짧은 시간에 너무 많은 요청을 보냈어요. 클라이언트로서: Retry-After 헤더에 지정된 지연 후 재시도하고, 지수 백오프를 구현하고, 가능하면 응답을 캐시하세요. 서버로서: 항상 Retry-After 헤더를 포함하고, 슬라이딩 윈도우 또는 토큰 버킷 알고리즘을 사용해 공정한 속도 제한을 적용하세요.
리소스가 현재 존재하지 않지만 나중에 존재할 수 있을 때(또는 존재했는지 불확실할 때)는 404 Not Found를 사용하세요. 리소스가 이전에 존재했고 대체 없이 영구적으로 삭제됐다는 걸 알 때는 410 Gone을 사용하세요. SEO 관점에서 410은 검색 엔진에 404보다 빠르게 URL을 인덱스에서 제거하라는 신호를 보내요.