HTTP 상태 코드

HTTP 상태 코드(200·301·404·500 등)를 쉬운 설명과 함께 검색하는 레퍼런스. 브라우저 처리.

1xx 정보 응답

100Continue
클라이언트가 요청을 계속 진행해도 된다는 임시 응답입니다.
101Switching Protocols
요청에 따라 프로토콜을 전환합니다(예: WebSocket).
102ProcessingWebDAV 전용입니다.
서버가 요청을 처리 중이며 아직 응답이 준비되지 않았습니다.
103Early Hints
최종 응답 전에 미리 로드 힌트를 보냅니다.

2xx 성공

200OK
요청이 성공했습니다.
201Created
요청이 성공했고 새 리소스가 생성되었습니다.
202Accepted
요청이 접수되었으나 아직 처리되지 않았습니다.
203Non-Authoritative Information
반환된 메타데이터가 원본 서버가 아닌 사본에서 온 것입니다.
204No Content
성공했지만 반환할 콘텐츠가 없습니다.
205Reset Content
성공 — 클라이언트는 문서 보기를 초기화해야 합니다(예: 폼 비우기).
206Partial Content
리소스의 일부만 전달합니다(범위 요청).
207Multi-StatusWebDAV 전용입니다.
본문에 여러 하위 요청 각각의 상태가 따로 담겨 있습니다.
208Already ReportedWebDAV 전용입니다.
이 컬렉션은 같은 응답 앞부분에서 이미 나열되어 반복하지 않습니다.
226IM Used
리소스에 인스턴스 조작(델타 인코딩)을 적용한 결과입니다.

3xx 리디렉션

300Multiple Choices
요청에 선택 가능한 여러 응답이 있습니다.
301Moved Permanently
리소스가 새 URL로 영구 이동했습니다.
302Found
리소스가 일시적으로 다른 URL에 있습니다.
303See Other
다른 URL로 GET 요청해 결과를 받으라는 응답입니다.
304Not Modified
캐시된 버전이 여전히 유효합니다(변경 없음).
305Use Proxy
요청한 리소스는 응답에 명시된 프록시를 통해서만 접근할 수 있습니다. 더 이상 권장되지 않습니다.
306Switch Proxy
더 이상 쓰이지 않습니다 — 폐기된 초안이 예약했을 뿐 표준이 되지 못했습니다.
307Temporary Redirect
원래 메서드를 유지하는 임시 리다이렉트입니다.
308Permanent Redirect
원래 메서드를 유지하는 영구 리다이렉트입니다.

4xx 클라이언트 오류

400Bad Request
요청 구문이 잘못되어 서버가 이해할 수 없습니다.
401Unauthorized
인증이 필요하거나 인증에 실패했습니다.
402Payment Required
향후 사용을 위해 예약됨 — 유료 API에서 쓰기도 합니다.
403Forbidden
요청을 이해했지만 권한이 없어 거부합니다.
404Not Found
요청한 리소스가 존재하지 않습니다.
405Method Not Allowed
이 리소스에 허용되지 않는 HTTP 메서드입니다.
406Not Acceptable
클라이언트의 Accept 헤더에 맞는 응답이 없습니다.
407Proxy Authentication Required
먼저 프록시 인증이 필요합니다.
408Request Timeout
클라이언트가 요청을 보내는 데 너무 오래 걸렸습니다.
409Conflict
요청이 리소스의 현재 상태와 충돌합니다.
410Gone
리소스가 영구적으로 사라졌으며 대체 주소가 없습니다.
411Length Required
서버가 Content-Length 헤더를 요구합니다.
412Precondition Failed
요청 헤더의 사전 조건이 충족되지 않았습니다.
413Content Too Large
요청 본문이 서버가 허용하는 크기보다 큽니다.
414URI Too Long
요청 URI가 서버가 허용하는 길이보다 깁니다.
415Unsupported Media Type
요청 본문의 미디어 타입을 서버가 지원하지 않습니다.
416Range Not Satisfiable
요청한 범위를 제공할 수 없습니다.
417Expectation Failed
Expect 요청 헤더의 조건을 충족할 수 없습니다.
418I'm a teapot
만우절 농담 코드 — 서버가 커피 내리기를 거부합니다.
421Misdirected Request
이 요청에 응답할 수 없는 서버로 요청이 전달되었습니다.
422Unprocessable Entity
요청 형식은 맞지만 의미상 오류가 있습니다(유효성 검증 실패).
423LockedWebDAV 전용입니다.
리소스가 잠겨 있습니다(WebDAV).
424Failed DependencyWebDAV 전용입니다.
먼저 처리되어야 할 요청이 실패해 이 요청도 실패했습니다.
425Too Early
재전송 위험이 있는 요청을 처리하지 않으려 합니다.
426Upgrade Required
클라이언트가 다른 프로토콜로 전환해야 합니다.
428Precondition Required
서버가 조건부 요청을 요구합니다.
429Too Many Requests
요청을 너무 많이 보냈습니다(요청 제한).
431Request Header Fields Too Large
요청의 헤더 필드가 너무 큽니다.
451Unavailable For Legal Reasons
법적 사유로 리소스를 제공할 수 없습니다(예: 검열).

5xx 서버 오류

500Internal Server Error
더 구체적인 메시지가 없는 일반 서버 오류입니다.
501Not Implemented
서버가 요청한 기능을 지원하지 않습니다.
502Bad Gateway
상위 서버가 잘못된 응답을 반환했습니다.
503Service Unavailable
서버가 일시적으로 과부하이거나 점검 중입니다.
504Gateway Timeout
상위 서버가 제때 응답하지 않았습니다.
505HTTP Version Not Supported
요청에 사용된 HTTP 버전을 지원하지 않습니다.
506Variant Also Negotiates
콘텐츠 협상 설정 오류 — 선택된 변형이 다시 협상을 시도해 순환합니다.
507Insufficient StorageWebDAV 전용입니다.
서버가 필요한 표현을 저장할 공간이 없습니다(WebDAV).
508Loop DetectedWebDAV 전용입니다.
요청을 처리하는 동안 무한 루프가 감지되었습니다.
510Not Extended
요청을 처리하려면 서버가 지원하지 않는 프로토콜 확장이 필요합니다.
511Network Authentication Required
네트워크 접근을 위해 인증이 필요합니다(캡티브 포털).

🔒 정적 레퍼런스입니다 — 업로드되지 않습니다.

HTTP 상태 코드 찾아보기

번호(예: 404)나 이름(예: Not Found)으로 검색해 상태 코드의 의미를 확인하세요. 카테고리별로 색이 구분됩니다: 1xx 정보, 2xx 성공, 3xx 리다이렉션, 4xx 클라이언트 오류, 5xx 서버 오류. 정적 레퍼런스라 업로드되지 않습니다.

다섯 가지 카테고리

2xx는 요청 성공, 3xx는 리다이렉션, 4xx는 클라이언트 실수(잘못된 URL 등), 5xx는 서버 실패를 뜻합니다.

첫 자리가 전부입니다

1xx는 "아직 진행 중", 2xx는 "됐다", 3xx는 "다른 데를 봐라", 4xx는 "네가 잘못 보냈다", 5xx는 "우리가 잘못했다" 입니다. 장애 때 중요한 건 마지막 구분입니다. 4xx가 쌓이면 클라이언트나 크롤러, 연동 쪽이 이상한 걸 보내는 것이고, 5xx가 쌓이면 우리 쪽입니다. 팀이 실수로 넘는 선이기도 합니다. 본문에 오류 메시지를 담고 200을 돌려주면 모든 모니터·캐시·재시도 정책이 요청이 성공했다고 믿습니다. 망가진 엔드포인트가 안 보이게 되는 가장 흔한 경로입니다.

사람들이 헷갈리는 짝들

301과 302. 301은 영구이고 브라우저가 강하게 캐시합니다. 프로필을 지울 때까지 남는 경우가 많고, 어떤 헤더로도 확실히 되돌릴 수 없습니다. 아직 정하는 중이라면 302나 307을 쓰고, 301은 정말 영원할 때만 쓰세요. 401과 403. 401은 "당신이 누군지 모르겠으니 인증해 보라", 403은 "누군지 정확히 알지만 그래도 안 된다"입니다. 권한 문제에 401을 보내면 클라이언트가 빠져나올 수 없는 로그인 루프에 들어갑니다. 404와 410. 410은 의도적으로 없앴다는 뜻이라, 크롤러가 404보다 훨씬 빨리 목록에서 내립니다.

자주 묻는 질문

301과 302의 차이는?

301은 영구 리다이렉트(링크를 갱신하세요), 302는 일시 리다이렉트(원래 URL을 계속 사용)입니다.

404는 무슨 뜻인가요?

Not Found — 서버가 해당 URL에서 요청한 리소스를 찾지 못했다는 뜻입니다.

415는 무슨 뜻인가요?

Unsupported Media Type — 요청의 Content-Type을 서버가 지원하지 않아 거부했다는 뜻입니다(POST·업로드 실패의 흔한 원인).

500은 무슨 뜻인가요?

Internal Server Error — 서버 쪽에서 문제가 생겼다는 일반적인 메시지입니다.

301과 302 중 무엇을 써야 하나요?

영구 이동이 확실하지 않다면 302(또는 메서드를 보존하는 307)입니다. 브라우저가 301을 공격적으로 캐시하고 되돌릴 확실한 방법이 없어, 잘못 보낸 301은 실수보다 몇 달을 더 삽니다.

401과 403은 어떻게 다른가요?

401은 인증이 안 됐다는 뜻입니다. 자격증명이 없거나 잘못됐으니 다시 시도하라는 것이죠. 403은 인증은 됐지만 거부한다는 뜻입니다. 권한 문제에 401을 쓰면 클라이언트가 로그인 루프에 빠집니다.

본문에 오류를 담고 200을 줘도 되나요?

거의 안 됩니다. 위에 얹은 프로토콜이 자체 상태를 정의하는 일부 RPC 방식 정도가 예외입니다. 그 외에는 경로상의 모든 캐시·모니터·재시도 정책에서 실패가 감춰집니다. 그것들은 본문이 아니라 상태 줄을 읽습니다.

418은 뭔가요?

1998년 만우절 농담 RFC에 정의된 찻주전자 코드로, 실제 상태 코드였던 적이 없습니다. 지금도 구현한 서버가 있지만 무엇도 여기에 의존해서는 안 됩니다.