~ / developer / http-status-code-lookup

🌐 HTTP 상태 코드 조회·설명

404, 403, 500, 502 같은 HTTP 상태 코드의 뜻과 흔한 원인, 대응 방법을 번호나 단어로 바로 찾아봐요.

input
result
검색 결과
-
광고

사용법

  1. 검색칸에 404 같은 번호나 timeout, 권한 같은 단어를 넣으세요. 번호는 앞부분만(예: 30) 넣어도 돼요.
  2. 분류 선택으로 1xx~5xx 중 한 묶음만 볼 수 있어요.
  3. 각 코드 아래에 뜻과 흔한 원인·확인할 곳이 나와요. 비표준 코드(Cloudflare, nginx)는 따로 표시돼요.

상태 코드는 앞자리로 읽어요

HTTP 상태 코드는 세 자리 숫자이고 첫 자리가 종류를 뜻해요. 1xx는 처리 중인 정보, 2xx는 성공, 3xx는 다른 곳으로 이동, 4xx는 요청한 쪽(클라이언트)의 잘못, 5xx는 서버 쪽 잘못이에요. 뜻을 모르는 코드가 나와도 첫 자리만 보면 "내가 고칠 문제인가, 서버 문제인가"를 바로 알 수 있어요. 이 기준은 HTTP 표준(RFC 9110)에 정의되어 있고, 자세한 번호 목록은 IANA 상태 코드 등록부에서 관리해요.

자주 보는 코드 한눈에

코드한 줄 의미먼저 확인할 것
200성공정상이에요.
301 / 302영구 / 임시 이동주소 통일은 301, 임시 이동은 302(또는 307).
304바뀐 게 없음브라우저 캐시를 쓰는 정상 동작이에요.
400잘못된 요청JSON 문법, 필수 값, 헤더를 확인하세요.
401인증 필요로그인·토큰이 없거나 만료됐어요.
403권한 없음로그인해도 접근이 금지된 자원이에요.
404없는 주소URL 오타, 삭제된 페이지, 깨진 링크.
429요청이 너무 많음Retry-After만큼 쉬었다가 재시도하세요.
500서버 내부 오류서버 로그의 오류 메시지를 보세요.
502 / 504상위 서버 응답 불량 / 지연nginx 뒤의 앱 서버 상태와 타임아웃.
503일시적 사용 불가과부하 또는 점검 중이에요.

헷갈리는 코드 쌍 구분하기

401과 403

401은 이름이 Unauthorized(권한 없음)지만 실제 뜻은 "누구인지 모르겠다, 로그인하라"예요. 로그인 정보를 다시 보내면 해결될 수 있어요. 403은 "누군지는 알지만 이 자원은 안 된다"예요. 관리자 페이지에 일반 계정으로 들어갔을 때처럼, 다시 로그인해도 같은 결과예요.

301과 302 (그리고 307·308)

301은 영구 이동이라 검색 엔진이 새 주소로 순위를 옮겨요. 302는 임시 이동이라 원래 주소를 계속 색인에 둬요. 사이트 주소를 바꿀 때 302를 쓰면 이전 주소가 오래 남을 수 있어요. 307과 308은 각각 302와 301처럼 임시·영구 이동이지만, POST를 GET으로 바꾸지 않고 그대로 유지한다는 점이 달라요. 폼 제출을 리다이렉트할 때 중요해요.

404와 410

404는 "지금은 없다", 410은 "영구히 없어졌고 돌아오지 않는다"예요. 검색 엔진은 410을 더 빨리 색인에서 지우는 경향이 있어요. 지운 글을 확실히 내리고 싶으면 410을 쓸 수 있지만 대부분의 사이트는 404로도 충분해요.

500, 502, 503, 504

500은 서버 안에서 코드가 터졌다는 뜻, 502는 중간 서버(프록시)가 뒤쪽 서버에서 이상한 응답을 받았다는 뜻, 503은 서버가 일부러/과부하로 요청을 받지 못한다는 뜻, 504는 뒤쪽 서버가 너무 오래 걸려서 프록시가 포기했다는 뜻이에요. 웹 서버(nginx)와 앱 서버(Node·PHP·Python)를 나눠 쓰는 환경에서는 앱이 죽으면 502, 앱이 멈추면 504가 흔해요.

검색 엔진(SEO) 관점에서

개발할 때 코드 고르는 기준

팀이나 API 문서마다 세부 규칙이 다를 수 있으니, 사내 규약이 있으면 그것을 우선하세요. 클라이언트는 번호의 첫 자리(2xx 성공, 4xx 요청 오류)로 먼저 분기하고, 구체적인 번호는 보조로 쓰는 편이 안전해요.

사이트 점검 때 확인 방법

브라우저 개발자도구(F12) → 네트워크 탭에서 요청마다 상태 코드를 볼 수 있어요. 터미널에서는 curl -I https://example.com으로 응답 헤더와 상태 줄만 확인할 수 있고, curl -sL -o /dev/null -w '%{http_code}' 주소는 리다이렉트를 따라간 뒤 최종 코드만 출력해요. 사이트가 Cloudflare 같은 CDN 뒤에 있으면 CDN이 보여 주는 코드(52x)와 원본 서버가 낸 코드가 다를 수 있어서 둘을 나눠 확인하세요. 주소 인코딩 문제로 404가 나는 경우는 URL 인코더로 주소를 확인해 보세요.

표준 코드 전체 목록

아래 표는 이 사전에 들어 있는 코드를 분류별로 정리한 것이에요. 비표준 코드(499·520~526)는 해당 서비스의 문서에만 정의돼 있어요.

1xx 정보

코드이름뜻
100Continue요청 헤더까지 잘 받았으니 본문을 계속 보내라는 중간 응답이에요.
101Switching Protocols프로토콜을 바꾸자는 요청을 받아들였어요.
102Processing요청을 받아 처리 중이니 기다리라는 응답이에요.
103Early Hints최종 응답 전에 미리 읽어 올 자원 목록(Link 헤더)을 먼저 보내요.

2xx 성공

코드이름뜻
200OK요청이 성공했어요.
201Created요청이 성공해서 새 자원이 만들어졌어요.
202Accepted요청은 접수했지만 처리는 아직 안 끝났어요.
203Non-Authoritative Information프록시가 원본 응답을 일부 바꿔서 전달했어요.
204No Content성공했지만 돌려줄 본문이 없어요.
205Reset Content성공했으니 입력 화면(폼)을 초기화하라는 뜻이에요.
206Partial Content요청한 범위(Range)의 일부만 보내요.
207Multi-Status여러 자원에 대한 결과가 한 응답에 들어 있어요.
208Already Reported같은 내용을 앞에서 이미 알려 줬으니 생략해요.
226IM Used서버가 변경분(delta)만 적용한 결과를 보내요.

3xx 리다이렉션

코드이름뜻
300Multiple Choices요청에 맞는 선택지가 여러 개예요.
301Moved Permanently주소가 영구적으로 바뀌었어요.
302Found임시로 다른 주소에 있어요.
303See Other다른 주소를 GET으로 다시 요청하라는 뜻이에요.
304Not Modified바뀐 게 없으니 저장해 둔 사본을 쓰세요.
305Use Proxy지정한 프록시를 통해 접근하라는 뜻이었어요.
307Temporary Redirect임시로 다른 주소예요. 요청 방법(POST 등)을 그대로 유지해요.
308Permanent Redirect영구 이동이에요. 요청 방법을 그대로 유지해요.

4xx 클라이언트 오류

코드이름뜻
400Bad Request요청 형식이 잘못돼 서버가 이해하지 못했어요.
401Unauthorized인증이 필요해요(로그인 안 됨, 토큰 만료·오류).
402Payment Required결제가 필요해요(예약된 코드).
403Forbidden누군지는 알지만 접근 권한이 없어요.
404Not Found요청한 주소에 자원이 없어요.
405Method Not Allowed이 주소에서는 그 요청 방법(GET/POST 등)을 못 써요.
406Not Acceptable요청이 원하는 형식(Accept)으로는 줄 수 없어요.
407Proxy Authentication Required프록시 인증이 필요해요.
408Request Timeout서버가 요청이 다 오기를 기다리다 시간이 지났어요.
409Conflict자원의 현재 상태와 충돌해서 처리할 수 없어요.
410Gone자원이 영구적으로 사라졌고 새 주소도 없어요.
411Length RequiredContent-Length 헤더가 꼭 필요해요.
412Precondition Failed요청에 건 조건(If-Match 등)이 맞지 않아요.
413Content Too Large요청 본문이 서버가 허용하는 크기를 넘었어요.
414URI Too Long주소(URL)가 너무 길어요.
415Unsupported Media Type서버가 지원하지 않는 형식(Content-Type)으로 보냈어요.
416Range Not Satisfiable요청한 범위(Range)가 자원 크기를 벗어났어요.
417Expectation FailedExpect 헤더의 기대를 서버가 만족시킬 수 없어요.
418I'm a teapot저는 찻주전자라 커피를 못 끓여요. 만우절 규격(RFC 2324)이에요.
421Misdirected Request이 서버가 응답할 수 없는 곳으로 요청이 잘못 보내졌어요.
422Unprocessable Content형식은 맞지만 내용에 의미 오류가 있어 처리할 수 없어요.
423Locked자원이 잠겨 있어요.
424Failed Dependency앞선 요청이 실패해서 이 요청도 실패했어요.
425Too Early재전송될 수 있는 요청이라 처리를 미뤄요.
426Upgrade Required더 높은 프로토콜로 올려서 다시 요청하세요.
428Precondition Required조건부 요청(If-Match 등)이 필수예요.
429Too Many Requests짧은 시간에 요청이 너무 많았어요.
431Request Header Fields Too Large요청 헤더가 너무 커요.
451Unavailable For Legal Reasons법적인 이유로 접근이 막혀 있어요.
499Client Closed Request응답이 오기 전에 클라이언트가 연결을 끊었어요.

5xx 서버 오류

코드이름뜻
500Internal Server Error서버 내부에서 예상치 못한 오류가 났어요.
501Not Implemented서버가 그 요청 방법을 지원하지 않아요.
502Bad Gateway게이트웨이·프록시가 상위 서버에서 잘못된 응답을 받았어요.
503Service Unavailable서버가 과부하이거나 점검 중이라 지금은 처리할 수 없어요.
504Gateway Timeout게이트웨이가 상위 서버의 응답을 기다리다 시간이 지났어요.
505HTTP Version Not Supported서버가 요청의 HTTP 버전을 지원하지 않아요.
506Variant Also Negotiates서버 설정 오류로 내용 협상이 순환돼요.
507Insufficient Storage서버 저장 공간이 부족해서 요청을 처리할 수 없어요.
508Loop Detected처리 중 무한 루프가 감지됐어요.
510Not Extended요청에 필요한 확장이 없어요.
511Network Authentication Required네트워크 접속 인증이 필요해요.
520Web Server Returned an Unknown Error원본 서버가 Cloudflare에 예상치 못한 응답을 줬어요.
521Web Server Is Down원본 서버가 연결을 거부했어요.
522Connection Timed OutCloudflare가 원본 서버와 연결하는 데 시간이 지났어요.
523Origin Is UnreachableCloudflare가 원본 서버에 도달할 수 없어요.
524A Timeout Occurred연결은 됐지만 원본 서버가 제때 응답하지 않았어요.
525SSL Handshake FailedCloudflare와 원본 서버 사이 SSL 핸드셰이크가 실패했어요.
526Invalid SSL Certificate원본 서버의 SSL 인증서가 유효하지 않아요.

출처: RFC 9110(HTTP Semantics), IANA HTTP Status Code Registry, 각 상태 코드를 정의한 RFC, Cloudflare·nginx 공식 문서. 일부 이름은 RFC 9110에서 바뀌었어요(413 Content Too Large, 422 Unprocessable Content, 416 Range Not Satisfiable). 서비스마다 같은 코드를 약간 다르게 쓸 수 있어요.

자주 묻는 질문

404와 403은 뭐가 달라요?
404는 해당 주소에 자원이 없다는 뜻이고, 403은 자원은 있지만 접근할 권한이 없다는 뜻이에요. 보안상 존재 자체를 숨기려고 403 대신 404를 쓰는 서비스도 있어요.
401과 403은 어떻게 구분하나요?
401은 인증이 안 됐거나 틀렸다는 뜻(로그인 필요)이고, 403은 인증은 됐지만 권한이 없다는 뜻이에요.
301과 302 중 뭘 써야 하나요?
주소를 영구히 옮겼다면 301(검색 순위가 새 주소로 이어져요), 잠깐만 다른 곳으로 보낸다면 302 또는 307을 쓰세요.
502 Bad Gateway는 왜 나오나요?
nginx 같은 프록시가 뒤쪽 앱 서버에서 올바른 응답을 못 받았을 때 나와요. 앱이 죽었거나 재시작 중이거나 포트가 안 맞을 때가 많아요.
503과 500은 뭐가 다른가요?
500은 서버 안에서 예상 못 한 오류가 났다는 뜻이고, 503은 과부하나 점검처럼 일시적으로 요청을 처리할 수 없다는 뜻이에요.
418 I'm a teapot은 진짜 쓰이나요?
1998년 만우절 문서(RFC 2324)에 나온 농담 규격이에요. 실제 서비스에서는 이스터에그나 봇 차단 신호로 가끔 써요.

관련 도구

더 둘러보기

💻 개발자 다른 도구

🔥 많이 찾는 도구

🔮 재미로 한 번 더

📝 읽어 볼 만한 글

글 전체 보기 →