본문으로 건너뛰기

HTTP 상태 코드 사전

HTTP Status Reference

각 상태 코드의 규격상 의미와 캐시 동작, 흔한 오용 사례를 설명합니다.

HTTP 상태 코드 전체를 찾아볼 수 있는 참조표입니다. 뜻, 어느 RFC가 정의하는지, 캐시가 기본적으로 저장해도 되는지, 어떤 헤더와 함께 보내야 하는지가 들어 있습니다. 코드·이름·요약을 함께 검색하며, 검색어를 받는 언어는 영어, 한국어, 일본어, 중국어(간체) 및 스페인어입니다. RFC의 정식 명칭뿐 아니라 평소에 부르는 말로도 찾습니다.

🔒 브라우저 안에서만 처리httpstatusreference

코드·이름·요약·비고를 함께 찾습니다. 쓸 수 있는 언어는 영어, 한국어, 일본어, 중국어(간체) 및 스페인어.

분류

404 Not Found

404Not Found찾을 수 없음

이 URL에는 리소스가 없습니다.

클라이언트 오류 — 요청 쪽에 잘못이 있습니다. 그대로 다시 보내면 똑같이 실패합니다.

정의된 곳
RFC 9110 §15.5.5
기본 캐시 가능 여부
예

기본값이 캐시 가능이고, 이 사실은 누구나 처음에는 놀랍니다. 이미 만들어 둔 페이지인데 CDN이 계속 404를 돌려주는 일이 그래서 생깁니다.

62개 중 62개

모든 HTTP 상태 코드와 그 뜻.
코드이름뜻캐시 가능
100Continue계속클라이언트는 요청 본문을 이어서 보내도 됩니다.아니오
101Switching Protocols프로토콜 전환서버가 클라이언트가 요청한 프로토콜로 바꿉니다.아니오
102Processing처리 중WebDAV: 요청을 처리하는 중입니다.아니오
103Early Hints이른 힌트실제 응답보다 먼저 보내는 예비 헤더로, 클라이언트가 미리 불러오기를 시작할 수 있습니다.아니오
200OK정상요청이 성공했습니다.예
201Created생성됨새 리소스가 만들어졌습니다.아니오
202Accepted접수됨요청을 접수했지만 아직 처리하지는 않았습니다.아니오
203Non-Authoritative Information신뢰할 수 없는 정보프록시가 중계하던 응답을 고쳤습니다.예
204No Content내용 없음성공했고, 본문은 일부러 비웠습니다.예
205Reset Content내용 재설정성공했으니 클라이언트는 방금 제출한 입력 양식을 비워야 합니다.아니오
206Partial Content부분 내용요청한 바이트 범위입니다.예
207Multi-Status다중 상태WebDAV: 하위 요청마다 상태를 담은 XML 본문입니다.아니오
208Already Reported이미 보고됨WebDAV: 이 구성원은 이미 열거했습니다.아니오
226IM UsedIM 사용됨인스턴스 조작을 적용한 결과가 응답입니다.아니오
300Multiple Choices여러 선택표현이 여럿 있으니 하나를 고르라는 뜻입니다.예
301Moved Permanently영구 이동리소스의 URL이 영영 바뀌었습니다.예
302Found찾음임시 리다이렉트입니다.아니오
303See Other다른 곳 참조다른 URL을 GET으로 가져오라는 뜻입니다.아니오
304Not Modified수정되지 않음캐시해 둔 사본을 그대로 써도 됩니다.아니오
305Use Proxy프록시 사용폐기된 코드로, 지정한 프록시를 쓰라는 뜻이었습니다.아니오
307Temporary Redirect임시 리다이렉트메서드를 유지하는 임시 리다이렉트입니다.아니오
308Permanent Redirect영구 리다이렉트메서드를 유지하는 영구 리다이렉트입니다.예
400Bad Request잘못된 요청요청의 형식이 잘못되어 서버가 처리하지 않습니다.아니오
401Unauthorized인증 필요인증이 필요하거나, 제시한 자격 증명이 거부되었습니다.아니오
402Payment Required결제 필요예약된 코드이고, 끝내 뜻이 정해지지 않았습니다.아니오
403Forbidden접근 금지서버가 요청을 이해했고, 거부합니다.아니오
404Not Found찾을 수 없음이 URL에는 리소스가 없습니다.예
405Method Not Allowed허용되지 않는 메서드URL은 있지만 이 메서드는 그 URL에 쓸 수 없습니다.예
406Not Acceptable수용할 수 없음서버가 만들 수 있는 것 가운데 `Accept` 헤더에 맞는 것이 없습니다.아니오
407Proxy Authentication Required프록시 인증 필요프록시가 자격 증명을 요구합니다.아니오
408Request Timeout요청 시간 초과클라이언트가 요청을 보내는 데 너무 오래 걸렸습니다.아니오
409Conflict충돌요청이 현재 상태와 충돌합니다.아니오
410Gone사라짐여기 있었지만 일부러 없앴고 다시 돌아오지 않습니다.예
411Length Required길이 필요`Content-Length` 헤더가 있어야 합니다.아니오
412Precondition Failed사전 조건 실패`If-Match`나 `If-Unmodified-Since` 조건을 만족하지 못했습니다.아니오
413Content Too Large본문이 너무 큼본문이 서버가 받아들이는 크기를 넘었습니다.아니오
414URI Too LongURI가 너무 김URL이 서버가 받아들이는 길이를 넘었습니다.예
415Unsupported Media Type지원하지 않는 미디어 타입본문의 `Content-Type`을 서버가 다루지 못합니다.아니오
416Range Not Satisfiable범위를 만족할 수 없음요청한 범위가 리소스 바깥입니다.아니오
417Expectation Failed기대 실패`Expect` 헤더의 요구를 들어줄 수 없습니다.아니오
418I'm a teapot나는 찻주전자1998년 만우절 농담이 끝내 사라지지 않고 남았습니다.아니오
421Misdirected Request잘못 보낸 요청이 서버는 요청이 지정한 호스트에 대한 응답을 만들 수 없습니다.아니오
422Unprocessable Content처리할 수 없는 내용형식은 맞지만 의미가 틀렸습니다.아니오
423Locked잠김WebDAV: 리소스가 잠겨 있습니다.아니오
424Failed Dependency의존 요청 실패WebDAV: 순서상 앞선 요청이 실패했습니다.아니오
425Too Early너무 이름서버가 얼리 데이터 요청이 재전송될 위험을 감수하지 않겠다는 뜻입니다.아니오
426Upgrade Required업그레이드 필요클라이언트가 프로토콜을 바꿔야 합니다.아니오
428Precondition Required사전 조건 필요서버가 조건부 요청을 요구합니다.아니오
429Too Many Requests요청이 너무 많음요청 횟수 제한에 걸렸습니다.아니오
431Request Header Fields Too Large요청 헤더가 너무 큼헤더가 너무 큽니다.아니오
451Unavailable For Legal Reasons법적 사유로 이용 불가법적 요구에 따라 차단되었습니다.예
500Internal Server Error서버 오류무언가 잘못되었는데 서버가 그보다 구체적으로 할 말이 없습니다.아니오
501Not Implemented구현되지 않음서버가 그 메서드를 아예 지원하지 않습니다.예
502Bad Gateway게이트웨이 오류상위 서버가 잘못된 응답을 보냈습니다.아니오
503Service Unavailable서비스 이용 불가일시적으로 요청을 처리할 수 없습니다.아니오
504Gateway Timeout게이트웨이 시간 초과상위 서버가 제때 응답하지 않았습니다.아니오
505HTTP Version Not SupportedHTTP 버전 미지원요청에 적힌 HTTP 버전을 지원하지 않습니다.아니오
506Variant Also Negotiates변형도 협상 대상콘텐츠 협상 설정이 잘못되었습니다.아니오
507Insufficient Storage저장 공간 부족WebDAV: 표현을 저장할 공간이 모자랍니다.아니오
508Loop Detected루프 감지됨WebDAV: 처리 도중 무한 루프에 빠졌습니다.아니오
510Not Extended확장되지 않음확장을 더 갖춰야 합니다.아니오
511Network 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은 "이 서버는 그 메서드를 어디에서도 구현하지 않았다"입니다.
여기서 "캐시 가능"은 휴리스틱하게 캐시 가능하다는 뜻입니다. RFC 9110 §15.1이, 다른 지시가 없을 때 캐시가 저장해도 되는 코드를 열거하고 있습니다. 404도 그 목록에 있습니다. 이미 게시한 페이지인데 CDN이 계속 없다고 응답하는 일이 그래서 생깁니다.

사용 방법

  1. 검색하거나 분류로 거릅니다

    숫자, 이름, 또는 지금 겪는 문제를 입력하세요. "gateway", "인증", "rate limit" 같은 것들입니다. 아니면 4xx로 좁혀서 죽 훑어도 됩니다.

  2. 하나를 열어 자세히 봅니다

    상세 칸에 정의한 명세, 휴리스틱 캐시 대상인지 여부, 그리고 응답이 반드시 함께 보내야 하는 헤더가 나옵니다. `Allow` 없는 405와 `Location` 없는 301은 둘 다 미완성입니다.

  3. 헷갈리는 짝을 읽습니다

    아래 구획이 잘못 고르기 쉬운 것들을 다룹니다. 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처럼 다뤄집니다. 다만 캐시와 프록시와 라이브러리가 분류를 보고 판단하기 때문에, 등록되지 않은 코드는 헤더로 담는 편이 나은 정보를 담을 뿐입니다.

이 도구로 이어지는 것

다음 단계

이 도구의 결과를 그대로 받을 수 있는 도구들입니다.