HTTP 상태 코드 사전
HTTP Status Reference
각 상태 코드의 규격상 의미와 캐시 동작, 흔한 오용 사례를 설명합니다.
HTTP 상태 코드 전체를 찾아볼 수 있는 참조표입니다. 뜻, 어느 RFC가 정의하는지, 캐시가 기본적으로 저장해도 되는지, 어떤 헤더와 함께 보내야 하는지가 들어 있습니다. 코드·이름·요약을 함께 검색하며, 검색어를 받는 언어는 영어, 한국어, 일본어, 중국어(간체) 및 스페인어입니다. RFC의 정식 명칭뿐 아니라 평소에 부르는 말로도 찾습니다.
코드·이름·요약·비고를 함께 찾습니다. 쓸 수 있는 언어는 영어, 한국어, 일본어, 중국어(간체) 및 스페인어.
404 Not Found
404Not Found찾을 수 없음
이 URL에는 리소스가 없습니다.
클라이언트 오류 — 요청 쪽에 잘못이 있습니다. 그대로 다시 보내면 똑같이 실패합니다.
RFC 9110 §15.5.5기본 캐시 가능 여부
예
기본값이 캐시 가능이고, 이 사실은 누구나 처음에는 놀랍니다. 이미 만들어 둔 페이지인데 CDN이 계속 404를 돌려주는 일이 그래서 생깁니다.
62개 중 62개
| 코드 | 이름 | 뜻 | 캐시 가능 |
|---|---|---|---|
| 100 | Continue계속 | 클라이언트는 요청 본문을 이어서 보내도 됩니다. | 아니오 |
| 101 | Switching Protocols프로토콜 전환 | 서버가 클라이언트가 요청한 프로토콜로 바꿉니다. | 아니오 |
| 102 | Processing처리 중 | WebDAV: 요청을 처리하는 중입니다. | 아니오 |
| 103 | Early Hints이른 힌트 | 실제 응답보다 먼저 보내는 예비 헤더로, 클라이언트가 미리 불러오기를 시작할 수 있습니다. | 아니오 |
| 200 | OK정상 | 요청이 성공했습니다. | 예 |
| 201 | Created생성됨 | 새 리소스가 만들어졌습니다. | 아니오 |
| 202 | Accepted접수됨 | 요청을 접수했지만 아직 처리하지는 않았습니다. | 아니오 |
| 203 | Non-Authoritative Information신뢰할 수 없는 정보 | 프록시가 중계하던 응답을 고쳤습니다. | 예 |
| 204 | No Content내용 없음 | 성공했고, 본문은 일부러 비웠습니다. | 예 |
| 205 | Reset Content내용 재설정 | 성공했으니 클라이언트는 방금 제출한 입력 양식을 비워야 합니다. | 아니오 |
| 206 | Partial Content부분 내용 | 요청한 바이트 범위입니다. | 예 |
| 207 | Multi-Status다중 상태 | WebDAV: 하위 요청마다 상태를 담은 XML 본문입니다. | 아니오 |
| 208 | Already Reported이미 보고됨 | WebDAV: 이 구성원은 이미 열거했습니다. | 아니오 |
| 226 | IM UsedIM 사용됨 | 인스턴스 조작을 적용한 결과가 응답입니다. | 아니오 |
| 300 | Multiple Choices여러 선택 | 표현이 여럿 있으니 하나를 고르라는 뜻입니다. | 예 |
| 301 | Moved Permanently영구 이동 | 리소스의 URL이 영영 바뀌었습니다. | 예 |
| 302 | Found찾음 | 임시 리다이렉트입니다. | 아니오 |
| 303 | See Other다른 곳 참조 | 다른 URL을 GET으로 가져오라는 뜻입니다. | 아니오 |
| 304 | Not Modified수정되지 않음 | 캐시해 둔 사본을 그대로 써도 됩니다. | 아니오 |
| 305 | Use Proxy프록시 사용 | 폐기된 코드로, 지정한 프록시를 쓰라는 뜻이었습니다. | 아니오 |
| 307 | Temporary Redirect임시 리다이렉트 | 메서드를 유지하는 임시 리다이렉트입니다. | 아니오 |
| 308 | Permanent Redirect영구 리다이렉트 | 메서드를 유지하는 영구 리다이렉트입니다. | 예 |
| 400 | Bad Request잘못된 요청 | 요청의 형식이 잘못되어 서버가 처리하지 않습니다. | 아니오 |
| 401 | Unauthorized인증 필요 | 인증이 필요하거나, 제시한 자격 증명이 거부되었습니다. | 아니오 |
| 402 | Payment Required결제 필요 | 예약된 코드이고, 끝내 뜻이 정해지지 않았습니다. | 아니오 |
| 403 | Forbidden접근 금지 | 서버가 요청을 이해했고, 거부합니다. | 아니오 |
| 404 | Not Found찾을 수 없음 | 이 URL에는 리소스가 없습니다. | 예 |
| 405 | Method Not Allowed허용되지 않는 메서드 | URL은 있지만 이 메서드는 그 URL에 쓸 수 없습니다. | 예 |
| 406 | Not Acceptable수용할 수 없음 | 서버가 만들 수 있는 것 가운데 `Accept` 헤더에 맞는 것이 없습니다. | 아니오 |
| 407 | Proxy Authentication Required프록시 인증 필요 | 프록시가 자격 증명을 요구합니다. | 아니오 |
| 408 | Request Timeout요청 시간 초과 | 클라이언트가 요청을 보내는 데 너무 오래 걸렸습니다. | 아니오 |
| 409 | Conflict충돌 | 요청이 현재 상태와 충돌합니다. | 아니오 |
| 410 | Gone사라짐 | 여기 있었지만 일부러 없앴고 다시 돌아오지 않습니다. | 예 |
| 411 | Length Required길이 필요 | `Content-Length` 헤더가 있어야 합니다. | 아니오 |
| 412 | Precondition Failed사전 조건 실패 | `If-Match`나 `If-Unmodified-Since` 조건을 만족하지 못했습니다. | 아니오 |
| 413 | Content Too Large본문이 너무 큼 | 본문이 서버가 받아들이는 크기를 넘었습니다. | 아니오 |
| 414 | URI Too LongURI가 너무 김 | URL이 서버가 받아들이는 길이를 넘었습니다. | 예 |
| 415 | Unsupported Media Type지원하지 않는 미디어 타입 | 본문의 `Content-Type`을 서버가 다루지 못합니다. | 아니오 |
| 416 | Range Not Satisfiable범위를 만족할 수 없음 | 요청한 범위가 리소스 바깥입니다. | 아니오 |
| 417 | Expectation Failed기대 실패 | `Expect` 헤더의 요구를 들어줄 수 없습니다. | 아니오 |
| 418 | I'm a teapot나는 찻주전자 | 1998년 만우절 농담이 끝내 사라지지 않고 남았습니다. | 아니오 |
| 421 | Misdirected Request잘못 보낸 요청 | 이 서버는 요청이 지정한 호스트에 대한 응답을 만들 수 없습니다. | 아니오 |
| 422 | Unprocessable Content처리할 수 없는 내용 | 형식은 맞지만 의미가 틀렸습니다. | 아니오 |
| 423 | Locked잠김 | WebDAV: 리소스가 잠겨 있습니다. | 아니오 |
| 424 | Failed Dependency의존 요청 실패 | WebDAV: 순서상 앞선 요청이 실패했습니다. | 아니오 |
| 425 | Too Early너무 이름 | 서버가 얼리 데이터 요청이 재전송될 위험을 감수하지 않겠다는 뜻입니다. | 아니오 |
| 426 | Upgrade Required업그레이드 필요 | 클라이언트가 프로토콜을 바꿔야 합니다. | 아니오 |
| 428 | Precondition Required사전 조건 필요 | 서버가 조건부 요청을 요구합니다. | 아니오 |
| 429 | Too Many Requests요청이 너무 많음 | 요청 횟수 제한에 걸렸습니다. | 아니오 |
| 431 | Request Header Fields Too Large요청 헤더가 너무 큼 | 헤더가 너무 큽니다. | 아니오 |
| 451 | Unavailable For Legal Reasons법적 사유로 이용 불가 | 법적 요구에 따라 차단되었습니다. | 예 |
| 500 | Internal Server Error서버 오류 | 무언가 잘못되었는데 서버가 그보다 구체적으로 할 말이 없습니다. | 아니오 |
| 501 | Not Implemented구현되지 않음 | 서버가 그 메서드를 아예 지원하지 않습니다. | 예 |
| 502 | Bad Gateway게이트웨이 오류 | 상위 서버가 잘못된 응답을 보냈습니다. | 아니오 |
| 503 | Service Unavailable서비스 이용 불가 | 일시적으로 요청을 처리할 수 없습니다. | 아니오 |
| 504 | Gateway Timeout게이트웨이 시간 초과 | 상위 서버가 제때 응답하지 않았습니다. | 아니오 |
| 505 | HTTP Version Not SupportedHTTP 버전 미지원 | 요청에 적힌 HTTP 버전을 지원하지 않습니다. | 아니오 |
| 506 | Variant Also Negotiates변형도 협상 대상 | 콘텐츠 협상 설정이 잘못되었습니다. | 아니오 |
| 507 | Insufficient Storage저장 공간 부족 | WebDAV: 표현을 저장할 공간이 모자랍니다. | 아니오 |
| 508 | Loop Detected루프 감지됨 | WebDAV: 처리 도중 무한 루프에 빠졌습니다. | 아니오 |
| 510 | Not Extended확장되지 않음 | 확장을 더 갖춰야 합니다. | 아니오 |
| 511 | Network Authentication Required네트워크 인증 필요 | 캡티브 포털이 로그인을 요구합니다. | 아니오 |
자주 헷갈리는 것들
- 401은 "당신이 누구인지 모르겠다"는 뜻이니 자격 증명을 보내 다시 시도하십시오. 403은 "당신이 누구인지 알고, 그래도 안 된다"는 뜻입니다. 자격 증명은 유효했지만 권한이 모자랐다면 403입니다.
- 400은 서버가 읽어 내지 못한 요청에, 422는 완벽하게 읽었지만 내용에 동의하지 않는 요청에 씁니다. 422는 데이터를 바꿔 다시 시도할 수 있지만, 400은 대개 클라이언트 자체가 잘못되었다는 뜻입니다.
- 첫 번째 축은 영구성입니다. 301과 308은 영구, 302와 307은 임시입니다. 두 번째 축은 메서드 보존입니다. 307과 308은 메서드를 유지하고, 301과 302는 관행상 유지하지 않습니다. API에서 헷갈리면 307이나 308을 쓰십시오.
- 둘 다 애플리케이션이 아니라 프록시가 냅니다. 502는 "상위 서버가 엉뚱하게 답했거나 죽었다", 504는 "상위 서버가 끝내 답하지 않았다"는 뜻입니다. 뒤쪽은 조정할 수 있는 시간 초과이고, 앞쪽은 고쳐야 하는 장애입니다.
- 둘 다 아무것도 없다는 뜻입니다. 410은 거기에 더해 다시는 돌아오지 않는다는 뜻이고, 검색 엔진은 그 말을 몇 달이 아니라 며칠 안에 반영합니다.
- 405는 "이 URL에서는 안 되고, 되는 것은 이것들이다"이며 `Allow` 헤더를 보내야 합니다. 501은 "이 서버는 그 메서드를 어디에서도 구현하지 않았다"입니다.
사용 방법
검색하거나 분류로 거릅니다
숫자, 이름, 또는 지금 겪는 문제를 입력하세요. "gateway", "인증", "rate limit" 같은 것들입니다. 아니면 4xx로 좁혀서 죽 훑어도 됩니다.
하나를 열어 자세히 봅니다
상세 칸에 정의한 명세, 휴리스틱 캐시 대상인지 여부, 그리고 응답이 반드시 함께 보내야 하는 헤더가 나옵니다. `Allow` 없는 405와 `Location` 없는 301은 둘 다 미완성입니다.
헷갈리는 짝을 읽습니다
아래 구획이 잘못 고르기 쉬운 것들을 다룹니다. 401과 403, 302와 307, 502와 504 같은 것들입니다.
자주 묻는 질문
401과 403은 뭐가 다른가요?
401은 요청에 유효한 자격 증명이 없었다는 뜻이고, 어떻게 제시해야 하는지 알려 주는 `WWW-Authenticate` 헤더를 함께 보내야 합니다. 403은 자격 증명은 이해했는데 그것으로는 부족하다는 뜻입니다. 로그인은 했지만 권한이 없는 사용자에게 401을 주는 것이 흔한 실수입니다.
CDN이 404를 왜 캐시하나요?
그래도 되기 때문입니다. RFC 9110 §15.1이 다른 지시가 없을 때 캐시가 휴리스틱하게 저장해도 되는 코드를 열거하는데 404가 거기 있습니다. 그 뒤에 게시한 페이지도 캐시가 만료되거나 지울 때까지 없는 상태로 남습니다. 나중에 200이 될 404라면 `Cache-Control: no-store`를 함께 보내세요.
302와 307 중에 무엇을 쓰나요?
메서드를 유지하려면 307입니다. 예전에 클라이언트들이 302를 받으면 POST를 GET으로 바꿨습니다. 명세가 그러라고 한 것도 아닌데 모두가 그랬습니다. 그래서 "메서드는 그대로, URL만 새로"를 분명히 말하려고 307과 308이 생겼습니다.
상태 코드를 직접 만들어도 되나요?
무엇이든 보낼 수는 있고, 클라이언트는 모르는 코드를 그 분류의 일반 코드로 처리합니다. 499는 400처럼 다뤄집니다. 다만 캐시와 프록시와 라이브러리가 분류를 보고 판단하기 때문에, 등록되지 않은 코드는 헤더로 담는 편이 나은 정보를 담을 뿐입니다.
이 도구로 이어지는 것
MIME 타입 조회
MIME Type Lookup
확장자로 MIME 타입을 찾거나 그 반대로 조회하고, 파일 바이트로 형식을 추정합니다.
HTTP 헤더 확인
HTTP Header Inspector
URL을 요청해 전체 응답 헤더·리다이렉트 경로·소요 시간·사용된 압축 방식을 보여 줍니다.
JSON 정렬·검사
JSON Formatter & Validator
JSON을 보기 좋게 정렬하거나 압축하고, 문법 오류가 난 줄과 열을 정확히 짚어 줍니다.
YAML 정렬·검사
YAML Formatter & Validator
YAML 들여쓰기를 통일하고 문법을 검사하며, 파서를 깨뜨리는 탭·앵커 실수를 표시합니다.
다음 단계
이 도구의 결과를 그대로 받을 수 있는 도구들입니다.
HTTP 요청 테스터
HTTP Request Builder
GET·POST·PUT·PATCH·DELETE·HEAD 요청을 헤더와 본문까지 지정해 보내고 상태·헤더·본문·소요 시간을 보여 줍니다. Cookie와 Authorization은 서버가 전달하지 않습니다.
HTTP 헤더 확인
HTTP Header Inspector
URL을 요청해 전체 응답 헤더·리다이렉트 경로·소요 시간·사용된 압축 방식을 보여 줍니다.
MIME 타입 조회
MIME Type Lookup
확장자로 MIME 타입을 찾거나 그 반대로 조회하고, 파일 바이트로 형식을 추정합니다.
Base64 인코딩·디코딩
Base64 Encoder & Decoder
텍스트와 파일을 Base64·Base64URL로 인코딩·디코딩하며 UTF-8을 올바르게 처리합니다.
curl 코드 변환
curl to Code
curl 명령을 fetch·axios·파이썬 requests·Go·PHP·PowerShell 코드로 변환합니다.
텍스트 해시 생성
Text Hash
문자열의 MD5·SHA-1·SHA-256·SHA-384·SHA-512·CRC-32를 계산하고 대문자·Base64 출력도 지원합니다.