본문으로 건너뛰기
오류사전오류 코드 해결 사전

가이드

HTTP 상태 코드 한눈에

확인일 2026.09.04

웹 페이지 대신 404, 503 같은 숫자가 뜨면 그것이 HTTP 상태 코드입니다. HTTP 규격(RFC 9110)에 따르면 상태 코드는 요청의 결과를 알리는 세 자리 정수이고, 유효한 값은 100부터 599까지입니다. 첫 자리가 응답의 계열을 정하고 뒤 두 자리는 분류 역할이 없습니다. 그래서 처음 보는 코드라도 첫 자리만 보면 요청 쪽 문제인지 서버 쪽 문제인지 알 수 있습니다. 이 가이드는 다섯 계열의 뜻, 자주 보는 코드 표, 방문자가 할 수 있는 일과 운영자가 볼 것을 MDN과 RFC 9110의 범위에서 정리했습니다. 코드별 페이지는 HTTP 상태 코드 허브에 있습니다.

다섯 계열

  • 1xx 정보: 요청을 받았고 처리를 계속한다는 중간 응답입니다. 한 요청에 1xx 응답이 0개 이상 온 뒤 다른 계열의 최종 응답이 정확히 하나 옵니다. 100 Continue, 101 Switching Protocols, 103 Early Hints가 여기 속합니다.
  • 2xx 성공: 요청을 받아 이해했고 수락했다는 뜻입니다. 200 OK가 대표이며, 201 Created(새 자원 생성), 204 No Content(보낼 내용 없음), 206 Partial Content(범위 요청의 일부) 등이 있습니다. 오류가 아니므로 보통 화면에 나타나지 않습니다.
  • 3xx 리다이렉션: 요청을 끝내려면 추가 동작이 필요하다는 뜻으로, 대개 다른 주소로 이동하라는 안내입니다. 301 Moved Permanently(영구 이동), 302 Found(임시 이동), 304 Not Modified(캐시된 사본을 그대로 써도 됨), 307·308(방식을 바꾸지 않는 임시·영구 이동)이 있습니다. 브라우저가 알아서 따라가므로 역시 오류 화면으로는 잘 안 보입니다.
  • 4xx 클라이언트 오류: 요청에 잘못된 문법이 있거나 요청을 이행할 수 없다는 뜻입니다. RFC는 클라이언트가 잘못한 것으로 보인다는 표현을 씁니다. 방문자 화면에서 가장 자주 보는 계열입니다.
  • 5xx 서버 오류: 유효해 보이는 요청을 서버가 이행하지 못했다는 뜻입니다. 서버가 스스로 오류를 냈거나 요청한 방식을 수행할 능력이 없음을 인지한 경우입니다.

모르는 코드를 만났을 때의 규칙도 RFC에 있습니다. 클라이언트는 등록된 코드를 전부 알 필요는 없지만 첫 자리로 계열은 반드시 이해해야 하고, 모르는 코드는 그 계열의 x00 코드와 같게 취급합니다. 예를 들어 471을 받으면 요청에 문제가 있다는 것만 알고 400 Bad Request처럼 다룹니다. 100~599 밖의 값은 무효이며, 그런 응답을 받으면 5xx 서버 오류처럼 처리해야 합니다. 600~999 범위는 라이브러리 오류 같은 HTTP 밖의 상태를 내부적으로 전달하는 데 자주 쓰입니다. MDN도 목록에 없는 응답을 받았다면 서버 소프트웨어가 임의로 정한 비표준 응답일 수 있다고 설명합니다.

자주 보는 코드

아래 표는 방문자 화면에 오류로 나타나는 4xx·5xx 가운데 자주 보는 것을 골라 한 줄 뜻과 ‘누가 고치나’를 적은 것입니다. ‘누가 고치나’는 RFC의 계열 정의(4xx는 요청 쪽, 5xx는 서버 쪽)와 MDN의 코드 설명에서 바로 따라 나오는 범위로만 적었습니다. 코드를 누르면 코드별 페이지로 갑니다.

코드 이름 한 줄 뜻 누가 고치나
400 Bad Request 요청 문법이 잘못되었거나 요청 구성이 올바르지 않아 서버가 처리하지 않음 요청을 보낸 쪽(주소·요청 형식)
401 Unauthorized 인증이 필요함. 이름과 달리 실제 뜻은 ‘인증되지 않음’ 방문자(로그인·인증)
403 Forbidden 서버가 누구인지는 알지만 그 내용에 대한 접근 권한이 없어 거부함 운영자(접근 권한)
404 Not Found 요청한 자원을 찾을 수 없음. 브라우저에서는 URL을 인식하지 못했다는 뜻 방문자(주소 확인)·운영자(자원 존재 여부)
405 Method Not Allowed 요청 방식은 알지만 그 자원에서는 지원하지 않음 운영자·개발자
408 Request Timeout 서버가 쓰지 않는 연결을 닫으려 함. 요청 없이도 보내질 수 있음 방문자(다시 시도)
410 Gone 내용이 영구히 삭제되었고 옮겨 간 주소도 없음 운영자(삭제 결정). 방문자는 링크·캐시 제거
413 Content Too Large 요청 본문이 서버 한도보다 큼 방문자(보내는 내용 줄이기)·운영자(한도)
414 URI Too Long 요청한 주소가 서버가 해석하려는 길이보다 긺 방문자(주소 길이)·운영자
429 Too Many Requests 일정 시간에 너무 많은 요청을 보냄(요청 제한) 방문자(잠시 뒤 다시)
451 Unavailable For Legal Reasons 법적 이유로 제공할 수 없는 자원(예: 정부 검열 페이지) 어느 쪽도 아님(법적 사유)
500 Internal Server Error 서버가 처리 방법을 모르는 상황을 만남. 더 맞는 5xx가 없을 때의 일반 코드 운영자
501 Not Implemented 서버가 그 요청 방식을 지원하지 않음. GET과 HEAD는 필수 지원 운영자
502 Bad Gateway 게이트웨이 역할의 서버가 뒤쪽 서버에서 잘못된 응답을 받음 운영자
503 Service Unavailable 서버가 요청을 처리할 준비가 안 됨. 유지보수나 과부하가 흔한 원인 운영자. 방문자는 Retry-After 뒤 재시도
504 Gateway Timeout 게이트웨이 역할의 서버가 제때 응답을 받지 못함 운영자
505 HTTP Version Not Supported 요청에 쓰인 HTTP 버전을 서버가 지원하지 않음 운영자·클라이언트 소프트웨어
511 Network Authentication Required 네트워크 접근 권한을 얻으려면 인증이 필요함 방문자(네트워크 인증)

표에 없는 4xx·5xx도 대부분 코드별 페이지가 있습니다. 406 Not Acceptable, 407 Proxy Authentication Required, 409 Conflict, 411 Length Required, 412 Precondition Failed, 415 Unsupported Media Type, 416 Range Not Satisfiable, 417 Expectation Failed, 421 Misdirected Request, 422 Unprocessable Content, 423 Locked, 426 Upgrade Required, 428 Precondition Required, 431 Request Header Fields Too Large, 506 Variant Also Negotiates, 507 Insufficient Storage, 508 Loop Detected, 510 Not Extended은 허브에서 찾을 수 있습니다. 402 Payment Required는 디지털 결제용으로 만들어졌지만 거의 쓰이지 않고 표준 관례도 없으며, 418 I’m a teapot은 찻주전자로 커피를 끓이라는 요청을 거부한다는 농담 코드입니다.

방문자가 할 수 있는 것

RFC 9110은 4xx와 5xx 응답에 대해, 서버는 HEAD 요청이 아닌 한 오류 상황과 그것이 일시적인지 영구적인지를 설명하는 내용을 함께 보내야 하고, 브라우저는 그 내용을 사용자에게 보여 주어야 한다고 정합니다. 따라서 숫자 아래에 적힌 문구를 먼저 읽는 것이 순서입니다. 그 문구에 사이트가 상황을 적어 두었을 수 있습니다. 코드별로 원문이 방문자 쪽 행동을 언급하는 것은 다음 정도입니다.

  • 404: 브라우저에서는 URL을 인식하지 못했다는 뜻이므로 주소를 확인합니다. 서버가 권한 없는 사용자에게 자원의 존재를 숨기려고 403 대신 404를 보내기도 합니다.
  • 401: 요청한 응답을 받으려면 클라이언트가 스스로 인증해야 합니다. 로그인이 필요한 경우입니다. 407은 같은 뜻이지만 프록시가 인증을 요구하는 경우입니다.
  • 408: 일부 서버는 요청이 없어도 쓰지 않는 연결을 닫으려고 이 응답을 보내며, 이 응답 없이 연결을 끊는 서버도 있습니다. 다시 요청하면 됩니다.
  • 429: 일정 시간에 요청을 너무 많이 보낸 것이므로 기다렸다가 다시 시도합니다.
  • 503: 유지보수나 과부하 같은 일시적 상태이며, 서버는 가능하면 복구 예상 시간을 Retry-After 헤더에 담아 보내야 합니다. 기다렸다가 다시 시도합니다.
  • 511: 네트워크 접근 자체에 인증이 필요하다는 뜻입니다.
  • 410: 내용이 영구히 삭제된 것이므로 클라이언트는 그 자원에 대한 캐시와 링크를 지우는 것이 기대되는 동작입니다.

5xx 계열은 정의상 서버 쪽 문제입니다. 방문자가 주소나 설정을 바꿔서 고칠 수 있는 종류가 아니므로, 화면의 안내문을 읽고 기다리거나 운영자에게 알리는 것이 원문 범위에서 할 수 있는 전부입니다. 코드가 100~599 밖이거나 목록에 없다면 비표준 응답이니 해당 서비스의 안내를 따라야 합니다.

운영자가 볼 것

사이트를 운영하는 쪽이라면 원문이 서버에 요구하는 사항이 곧 점검 목록입니다.

  • 4xx·5xx 응답에는 오류 상황과 일시적·영구적 여부를 설명하는 내용을 담아야 합니다(HEAD 요청 제외).
  • 503에는 문제를 설명하는 사용자 친화적인 페이지를 함께 보내야 하고, 일시적 상태에만 써야 하며, 가능하면 Retry-After 헤더에 복구 예상 시간을 넣어야 합니다. MDN은 이 응답과 함께 보내는 캐시 관련 헤더에도 주의하라고 합니다. 일시적 상태의 응답이 캐시되어서는 안 되기 때문입니다.
  • RFC 9110은 휴리스틱하게 캐시될 수 있는 상태 코드를 따로 정합니다. 200, 203, 204, 206, 300, 301, 308, 404, 405, 410, 414, 501이 그것이며, 방식 정의나 명시적 캐시 제어로 달리 정하지 않는 한 캐시가 이 응답들을 재사용할 수 있습니다. 즉 404나 410 같은 오류 응답이 캐시에 남아 실제 상태가 바뀐 뒤에도 한동안 계속 보일 수 있다는 뜻입니다. 그 밖의 코드는 휴리스틱 캐시 대상이 아닙니다.
  • 500은 서버가 더 적절한 5xx를 찾지 못했을 때의 일반 코드입니다. 502504는 서버가 게이트웨이로 동작하면서 뒤쪽 서버에서 잘못된 응답을 받았거나 제때 응답을 받지 못한 경우이므로, 살펴볼 곳이 앞단이 아니라 뒤쪽 서버입니다.
  • 501은 서버가 그 요청 방식을 지원하지 않는다는 뜻인데, GET과 HEAD는 서버가 반드시 지원해야 하므로 이 두 방식에 501을 돌려주어서는 안 됩니다.
  • 403404의 구분: 403은 클라이언트가 누구인지 알면서 권한이 없어 거부하는 것이고, 자원의 존재를 숨기고 싶으면 403 대신 404를 보낼 수 있습니다.
  • 이 규격 밖의 상태 코드를 쓰려면 IANA의 HTTP 상태 코드 레지스트리에 등록되어 있어야 합니다. MDN이 말하는 비표준 응답은 이 등록 목록에도 없는 서버 소프트웨어 고유의 코드입니다.

코드가 정해졌다면 HTTP 상태 코드 허브의 코드별 페이지에서 뜻과 원문 범위의 해결 순서를 확인하세요. 브라우저가 페이지 대신 ERR_로 시작하는 코드를 보여 준다면 그것은 HTTP 상태 코드가 아니라 Chrome의 네트워크 오류이므로 크롬 연결 오류 공통 절차를 보면 됩니다. 두 코드의 생김새 차이는 오류 코드 검색하는 법에 있습니다.

출처: HTTP response status codes (MDN Web Docs, CC BY-SA 2.5), RFC 9110 HTTP Semantics (IETF Trust, 요약 인용), 2026-09-03 확인. 문장은 오류사전이 다시 쓴 것입니다.