HTTP 상태 코드표
이 HTTP 오류 코드는 무슨 뜻이고 왜 날까?
404 는 찾을 수 없음, 500 은 서버 내부 오류입니다(RFC 9110).
RFC 9110 (2022) 기준 · HTTP Semantics 15장 · 업데이트
-
상태 코드 전체
| 코드 | 뜻 |
|---|---|
| 100 | 계속 Continue 요청 머리를 받았으니 본문을 보내도 된다는 뜻. Expect: 100-continue 를 보낸 큰 업로드에서 봅니다 |
| 101 | 프로토콜 바꿈 Switching Protocols Upgrade 요청을 받아들여 WebSocket 등으로 바꿀 때 |
| 103 | 미리 알림 Early Hints 최종 응답 전에 Link 헤더로 CSS·폰트를 미리 받게 할 때 (RFC 8297) |
| 200 | 성공 OK 요청이 성공했습니다. 가장 흔한 응답 |
| 201 | 만들어짐 Created POST·PUT 으로 새 리소스를 만들었습니다. Location 헤더에 새 주소 |
| 202 | 접수됨 Accepted 요청은 받았지만 처리는 아직(비동기 작업 대기열 등) |
| 203 | 변형된 정보 Non-Authoritative Information 중간 프록시가 원래 응답을 고쳐서 보냈습니다 |
| 204 | 내용 없음 No Content 성공했지만 돌려줄 본문이 없습니다. 삭제·저장 API 에서 흔함 |
| 205 | 화면 초기화 Reset Content 성공했으니 입력 폼을 비우라는 뜻 |
| 206 | 일부 내용 Partial Content Range 요청에 파일 일부만 보냈습니다. 동영상 재생·이어받기 |
| 300 | 여러 선택 Multiple Choices 고를 수 있는 표현이 여럿입니다 (잘 쓰지 않음) |
| 301 | 영구 이동 Moved Permanently 주소가 영구히 바뀌었습니다. 검색엔진도 새 주소로 옮깁니다. POST 가 GET 으로 바뀔 수 있음 |
| 302 | 임시 이동 Found 잠시 다른 주소로 보냅니다. 로그인 뒤 돌려보내기 등. POST 가 GET 으로 바뀔 수 있음 |
| 303 | 다른 곳 보기 See Other POST 처리 뒤 결과 페이지를 GET 으로 보라는 뜻 (새로고침 중복 제출 방지) |
| 304 | 바뀌지 않음 Not Modified 캐시한 것을 그대로 쓰라는 뜻. If-None-Match·If-Modified-Since 요청에 |
| 307 | 임시 이동(방식 유지) Temporary Redirect 302 와 같지만 POST 는 POST 그대로 다시 보냅니다 |
| 308 | 영구 이동(방식 유지) Permanent Redirect 301 과 같지만 요청 방식과 본문을 그대로 유지합니다 |
| 400 | 잘못된 요청 Bad Request 요청 모양이 틀렸습니다. JSON 문법 오류·필수 값 빠짐 등 |
| 401 | 인증 필요 Unauthorized 로그인(인증)이 없거나 토큰이 만료됐습니다. WWW-Authenticate 헤더와 함께 |
| 402 | 결제 필요 Payment Required 나중을 위해 남겨 둔 코드. 일부 서비스가 결제 필요로 씁니다 |
| 403 | 금지됨 Forbidden 누구인지는 알지만 권한이 없습니다. 다시 로그인해도 안 됨 |
| 404 | 찾을 수 없음 Not Found 그 주소에 리소스가 없습니다. 주소 오타·삭제된 페이지 |
| 405 | 허용 안 된 방식 Method Not Allowed 그 주소는 이 방식(GET·POST 등)을 받지 않습니다. Allow 헤더에 가능한 방식 |
| 406 | 받을 수 없는 형식 Not Acceptable Accept 헤더가 원하는 형식으로 줄 수 없습니다 |
| 407 | 프록시 인증 필요 Proxy Authentication Required 중간 프록시에 먼저 로그인해야 합니다 |
| 408 | 요청 시간 초과 Request Timeout 요청을 다 보내기 전에 서버가 기다리다 끊었습니다 |
| 409 | 충돌 Conflict 지금 상태와 부딪힙니다. 같은 아이디로 가입·동시에 수정 등 |
| 410 | 사라짐 Gone 일부러 영구 삭제했습니다. 404 보다 분명한 표시 |
| 411 | 길이 필요 Length Required Content-Length 헤더가 있어야 합니다 |
| 412 | 전제 조건 실패 Precondition Failed If-Match 같은 조건이 맞지 않습니다 (낙관적 잠금) |
| 413 | 본문이 너무 큼 Content Too Large 업로드가 서버 한도보다 큽니다 (옛 이름 Payload Too Large) |
| 414 | 주소가 너무 김 URI Too Long 주소(쿼리 포함)가 너무 깁니다. 긴 값은 POST 본문으로 |
| 415 | 지원 안 되는 형식 Unsupported Media Type Content-Type 이 맞지 않습니다. JSON 을 보내며 헤더를 빠뜨림 등 |
| 416 | 범위 잘못됨 Range Not Satisfiable Range 요청이 파일 크기를 벗어났습니다 |
| 417 | 기대 실패 Expectation Failed Expect 헤더 요구를 들어줄 수 없습니다 |
| 418 | 쓰지 않음(찻주전자) (Unused) I'm a teapot 만우절 농담(RFC 2324)에서 온 코드. RFC 9110 은 쓰지 않는 번호로 남겨 둡니다 |
| 421 | 잘못 온 요청 Misdirected Request 이 서버가 답할 수 없는 호스트로 온 요청 (HTTP/2 연결 재사용 등) |
| 422 | 처리할 수 없는 내용 Unprocessable Content 모양은 맞지만 값이 규칙에 어긋납니다. 입력 검증 실패에 흔함 |
| 425 | 너무 이름 Too Early 재전송 공격 위험이 있어 TLS 0-RTT 요청을 처리하지 않습니다 (RFC 8470) |
| 426 | 업그레이드 필요 Upgrade Required 다른 프로토콜(예: 새 TLS)로 바꿔야 합니다 |
| 428 | 전제 조건 필요 Precondition Required 덮어쓰기 충돌을 막으려 If-Match 같은 조건 헤더를 요구합니다 (RFC 6585) |
| 429 | 요청이 너무 많음 Too Many Requests 정해진 시간에 너무 많이 요청했습니다(속도 제한). Retry-After 만큼 기다리세요 (RFC 6585) |
| 431 | 헤더가 너무 큼 Request Header Fields Too Large 쿠키가 너무 쌓였을 때 흔합니다 (RFC 6585) |
| 451 | 법적 이유로 막힘 Unavailable For Legal Reasons 법원 명령·검열 등 법적 이유로 보여 줄 수 없습니다 (RFC 7725) |
| 500 | 서버 내부 오류 Internal Server Error 서버 코드가 예상하지 못한 오류를 냈습니다. 서버 로그를 보세요 |
| 501 | 구현 안 됨 Not Implemented 서버가 이 요청 방식을 아예 지원하지 않습니다 |
| 502 | 게이트웨이 오류 Bad Gateway 앞단(프록시·로드밸런서)이 뒤 서버에서 잘못된 응답을 받았습니다. 앱 서버가 죽었을 때 흔함 |
| 503 | 서비스 이용 불가 Service Unavailable 점검·과부하로 잠시 처리할 수 없습니다. Retry-After 헤더와 함께 |
| 504 | 게이트웨이 시간 초과 Gateway Timeout 앞단이 뒤 서버 응답을 기다리다 시간을 넘겼습니다. 느린 쿼리·외부 API |
| 505 | HTTP 버전 미지원 HTTP Version Not Supported 요청한 HTTP 버전을 지원하지 않습니다 |
| 511 | 네트워크 인증 필요 Network Authentication Required 공공 와이파이 로그인 화면(캡티브 포털) (RFC 6585) |
1xx 정보 · 2xx 성공 · 3xx 이동 · 4xx 클라이언트 오류 · 5xx 서버 오류
결과가 이상한가요?
어떻게 계산했나요
RFC 9110 (2022) 기준 · HTTP Semantics 15장
- RFC 9110 HTTP Semantics(2022년 6월) 15장의 상태 코드와 이름. 413·422 는 RFC 9110 의 새 이름(Content Too Large·Unprocessable Content)
- RFC 9110 밖의 자주 보는 코드: 103(RFC 8297), 425(RFC 8470), 428·429·431·511(RFC 6585), 451(RFC 7725)
- 418 은 RFC 9110 이 쓰지 않는 번호로 남겨 둔 것 (RFC 2324 농담에서 유래)
- 뜻풀이·예는 다해봄이 쉬운 말로 줄인 것입니다. 정확한 정의는 RFC 원문을 보세요
자주 묻는 질문
401 과 403 은 어떻게 다른가요?
401 Unauthorized 는 '누구인지 모름'입니다. 로그인하지 않았거나 토큰이 만료돼 인증이 필요할 때입니다. 403 Forbidden 은 '누구인지는 알지만 권한 없음'이라 다시 로그인해도 안 됩니다.
301·302·307·308 은 언제 쓰나요?
영구히 옮겼으면 301 이나 308, 잠시 보내는 것이면 302 나 307 입니다. 301·302 는 브라우저가 POST 를 GET 으로 바꿀 수 있고, 307·308 은 방식과 본문을 그대로 유지합니다. 검색엔진에 새 주소를 알리려면 영구 이동(301·308)을 씁니다.
502 와 504 는 무엇이 다른가요?
둘 다 앞단(프록시·로드밸런서·CDN)이 뒤 서버와 이야기하다 생긴 오류입니다. 502 는 뒤 서버에서 잘못된 응답을 받았을 때(앱이 죽음 등), 504 는 응답을 기다리다 시간을 넘겼을 때(느린 쿼리·외부 API)입니다.
400 과 422 는?
400 은 요청 모양 자체가 틀렸을 때(JSON 문법 오류 등), 422 는 모양은 맞지만 값이 규칙에 어긋날 때(이메일 형식이 틀림 등)입니다. 둘 다 RFC 9110 에 있습니다.
기준이 무엇인가요?
HTTP 의 뜻을 정한 RFC 9110(HTTP Semantics, 2022년 6월) 15장입니다. 429·431·511(RFC 6585), 451(RFC 7725), 103(RFC 8297), 425(RFC 8470)처럼 다른 RFC 에서 정한 자주 보는 코드는 출처를 따로 적었습니다.