최근 수정 시각 : 2024-12-12 13:21:39

HTTP/응답 코드

HTTP 상태 코드에서 넘어옴

파일:상위 문서 아이콘.svg   상위 문서: HTTP
1. 개요2. 표준 응답 코드
2.1. 1XX2.2. 2XX2.3. 3XX2.4. 4XX2.5. 5XX
3. 비표준 응답 코드
3.1. 1XX3.2. 2XX3.3. 3XX3.4. 4XX3.5. 5XX3.6. 6XX 이후
4. 여담

1. 개요

HTTP 응답 코드를 정리하는 문서.

MDN Web Docs2024년 9월 현재 최신 문서인 RFC 9110, http.dev의 문서에서 찾을 수 있다.

응답 코드는 보통 아래와 같이 분류되어 있다.
  • 1XX: 정보 전달, 작업을 진행하고 있음을 의미
  • 2XX: 성공, 작업을 성공적 처리했음을 의미
  • 3XX: 리다이렉션, 요청 완료를 위해 리다이렉션이 이루어져야 한다는 의미
  • 4XX: 클라이언트 오류, 클라이언트에서 요청한 내용이 올바르지 않다는 의미
  • 5XX: 서버 오류, 서버에서 요청을 처리할 수 없었음을 의미
  • 6XX 이후: 정의되지 않음, 사용자 정의 영역에 해당한다.

2. 표준 응답 코드

2.1. 1XX

정보 전달: 요청을 받았고, 작업을 진행 중이라는 의미이다. HTTP/1.0 이후 한동안 쓰이지 않아 서버도 클라이언트에 이 코드를 보내지 않았지만, 101의 경우 WebSocket 등에서, 103의 경우 페이지 로드 속도를 빠르게 하기 위해서 다시 쓰이기 시작했다.[1]
  • 100 Continue [2]
  • 101 Switching Protocols [3]
  • 102 Processing[WebDAV]: 사용자가 수신 요청을 하여 처리하고는 있지만 아직은 제대로 된 응답을 할 수 없는 상태임을 응답하는 코드이다.
  • 103 Early Hints: Link 헤더와 함께 사용되며 주로 서버가 응답을 준비하는 동안 사용자가 사전 로딩(PreLoading)을 할 수 있도록 하는 응답 코드.

2.2. 2XX

성공: 이 작업을 성공적으로 받았고, 이해했으며, 받아들여졌다는 의미이다. 200, 201, 204, 206이 주로 사용되며, 나머지는 볼 일이 거의 없다.
  • 200 OK: 성공적으로 처리했을 때 쓰인다. 가장 일반적으로 볼 수 있는 HTTP 상태.
  • 201 Created: 요청이 성공적으로 처리되어서 리소스가 만들어졌음을 의미한다. 여기서 리소스는 회원가입자의 계정정보, 게시글 작성 등을 의미한다. 주로 POST를 사용 시 만나볼 수 있다.
  • 202 Accepted: 요청이 받아들여졌지만 처리되지 않았음을 의미한다. 3가지의 경우가 있는데 요청을 처리중이나 시간이 꽤 걸리는 경우, 비동기로 처리될 경우, 요청은 받았지만 우선순위나 과도한 트래픽, 기타 사유등으로 언제 처리될 지 모를 경우에 출력된다.
  • 203 Non-Authoritative Information : 응답받은 메타 정보가 서버에 저장된 원본하고는 동일하지는 않지만 로컬이나 다른 복사본에서 수집되었음을 알리는 응답 코드. 이 경우에도 보통은 200 OK 응답 코드가 203 Non-Authoritative Information 응답 코드보다 우선적으로 응답한다.
  • 204 No Content: 성공적으로 처리했지만 콘텐츠를 제공하지는 않는다. 일반 사용자가 볼 일은 매우 드문 코드며 처리 결과만 중요한 API 요청 등에서 주로 사용한다.[5]
  • 205 Reset Content: 서버가 요청을 성공적으로 처리했지만 콘텐츠를 표시하지 않는다. 204 응답과 달리 이 응답은 요청자가 문서 보기를 재설정할 것을 요구한다. (예: 새 입력을 위한 양식 비우기.)
  • 206 Partial Content: 콘텐츠의 일부 부분만 제공한다. 보통 클라이언트에서 시작 범위나 다운로드할 범위를 지정한 경우 자동으로 해당 부분만 제공할 때 사용하는 코드이다.
  • 207 Multi-Status[WebDAV]: 여러 소스에서 여러 응답인 상태에서 적절한 정보를 사용자한테 제공할수 있도록 하는 응답 코드.
  • 208 Already Reported[WebDAV]: DAV 바인딩 멤버는 이미 응답의 앞부분에 열거되어 있으며 다시 포함되지 않는다는 의미로 응답하는 응답 코드.
  • 226 IM Used: 서버가 사용자의 GET 요청에 대한 리소스의 의무는 다했고, 현재 인스턴스에서 적용된 하나 이상의 인스턴스 조작 결과를 보낼 때 사용되는 코드이다. HTTP Delta Encoding 전용.

2.3. 3XX

리다이렉션: 이 요청을 완료하기 위해서는 리다이렉션이 이루어져야 한다는 의미이다. 짧은 주소(단축 URL) 서비스의 경우 접속 시 301이나 302 코드를 보내고, 헤더의 location에 리다이렉션할 실제 URL을 적어 보낸다.
  • 300 Multiple Choices(복수 응답): 서버에서 여러 개의 응답이 있음을 알릴 때 사용할 의도로 만들어졌으나, 정작 응답을 선택하는 방법은 표준화되지 않아 사용되지 않는다.
  • 301 Moved Permanently(영구 이동): 영구적으로 콘텐츠가 이동했을 때 사용된다. 검색 엔진 등의 로봇에 영향을 준다.
  • 302 Found: 일시적으로 콘텐츠가 이동했을 때 사용된다. 301 Moved Permanently와는 달리 로봇에 영향을 주지 않는다.
  • 303 See Other: 서버가 사용자의 GET 요청을 처리하여 다른 URL에서 요청된 정보를 가져올 수 있도록 응답하는 코드.
  • 304 Not Modified: 200 다음으로 많이 볼 수 있는 HTTP 상태이다. 이 경우 보통 브라우저에 캐시되어 있는 버전을 쓴다.
  • 305 Use Proxy(프록시 사용)[영구결번]: 사실상 영구 결번
  • 306 (Unused)[영구결번]
  • 307 Temporary Redirect: 302와 동일하게 일시적인 콘텐츠 이동을 나타낼 때 사용되나, HTTP 메소드의 변경을 허용하지 않는다.
  • 308 Permanent Redirect: 301와 동일하게 영구적인 콘텐츠 이동을 나타낼 때 사용되나, HTTP 메소드의 변경을 허용하지 않는다.

2.4. 4XX

클라이언트 오류: 이 요청은 올바르지 않다는 의미이다. 여기서부터 브라우저에 직접 표출된다. 굵게 강조된 것은 자주 보이는 오류들이다.
  • 400 Bad Request(잘못된 요청): 요청 자체가 잘못되었을 때 사용하는 코드이다. 다음 상황에서 주로 발생한다.
    • URL 요청이 잘못된 경우, 나무위키 기준으로는 그냥 브라우저에서 https://namu.wiki/i/...로 들어가거나 아무 URI에나 퍼센트를 끼워넣어 유효하지 않은 URL 인코딩(urlencode)으로 만들면 된다.
    • 존재하지 않는 HTTP 메서드로 요청하는 경우, 파이어폭스의 네트워크 개발자 도구를 열고 새 요청을 존재하지 않는 HTTP 메소드(그냥 X 등으로 써도 된다)로 요청을 하면 나온다. 존재하지만 지원하지는 않는 경우는 405 Method Not Allowed를 반환해야 한다.
    • POST, PUT 등의 요청에서 같이 전송한 본문 데이터가 잘못된 경우, JSON 문자열로 받는 요청에 Base64 문자열을 보낸 경우 등에 발생한다.
  • 401 Unauthorized(권한 없음): 인증이 필요한 리소스에 인증 없이 접근할 경우 발생한다. 이 응답 코드를 사용할 때에는 반드시 브라우저에 어느 인증 방식[10]을 사용할 것인지 보내야 한다. 단순히 권한이 없는 경우 이 응답 코드 대신 아래 403 Forbidden을 사용해야 한다.
  • 402 Payment Required(결제 필요): 결제가 필요한 리소스에 결제 없이 접근했을 경우 발생. HTTP/1.1에서 정의되었으나 구현하지는 않고, 향후에 사용하기 위해 예약해 둔 코드이다. 딱히 표준조차 존재하지 않아, 보통은 403을 사용한다.
  • 403 Forbidden(거부됨): 서버가 요청을 거부할 때 발생한다. 주로 다음 상황에서 발생한다.
    • 관리자가 해당 사용자를 차단하는 등으로 접근이 거절됐음을 명시할 때, 로그인 여부와는 무관하다. 로그인이 필요한 경우는 위의 401 Unauthorized를 사용해야 한다.
    • 서버에 index.html 파일이 없는 경우로, 정확하게는 파일 리스트 조회가 거절된 경우. 옛날 사이트들은 index.html 파일이 없으면 기본적으로 디렉터리 내 파일 조회를 수행하여, 이 결과를 리스트로 반환하였다. 그러나 이런 방식은 리소스 유출 등 보안상 문제점이 있어, 오늘날의 대다수 사이트들은 기본적으로 파일 리스트 조회 기능을 거부해 403 오류를 띄운다. 물론 서버 설정을 통해 파일 리스트 조회 기능을 열 수도 있는데, 미러 사이트가 대표적인 사례에 속한다. 파일 리스트 역시 실제로는 웹 페이지로 제공되기에, CSS 같은 것도 다 지원한다. 파일까지 모두 지정해서 접근하는 경우 서버에서 바로 파일에 접근하기 때문에 404 Not Found가 발생한다.
  • 404 Not Found(찾을 수 없음): 찾는 리소스가 없다는 뜻으로, 가장 흔하게 볼 수 있는 오류 코드이다. 보다 정확하게는 '서버는 찾았으나 데이터는 찾지 못함'을 의미. 서버를 찾지 못할 경우에는 아예 접속 자체가 되지 않는다.
  • 405 Method Not Allowed(허용되지 않은 방법) : PUT이나 DELETE 등 서버에서 허용되지 않은 메소드로 요청시 사용하는 코드이다. 정의되지 않은 메소드인 경우 400 Bad Request를 반환해야 한다.
  • 406 Not Acceptable(받아들일 수 없음) : 요청은 정상이나 서버에서 받아들일 수 없는 요청일시 사용하는 코드이다. 보통 웹 방화벽에 걸리는 경우 이 코드가 반환된다.
  • 407 Proxy Authentication Required(프록시 인증 필요) : 프록시 인증이 필요할 경우 사용하는 코드이다.
  • 408 Request Timeout(요청 시간 초과) : 요청 중 시간이 초과되었을 때 사용하는 코드이다.
  • 409 Conflict(충돌) : 사용자의 요청이 서버의 상태와 충돌하여 응답하는 코드이다.
  • 410 Gone(사라짐) : 404와는 달리 찾는 리소스가 영원히 사라진 경우 사용하는 코드이다. 쉽게 말해, 404는 “찾는 게 일단 여긴 없는데 다른 곳에는 있을 수도 있다”라는 뜻이고, 410은 “있었는데요, 없었습니다”라는 뜻이다. 주로 검색 엔진에게 색인된 주소가 완전히 사라졌음을 알릴 때 사용한다.
  • 411 Length Required(길이 필요) : 서버에 요청 시 Content-Length값을 지정하지 않아 서버에서 응답을 거부할 때 쓰는 코드이다.
  • 412 Precondition Failed(전제 조건 실패): 사용자가 서버로 조건부 요청(Conditional Requests)을 보낼 때 서버의 전제 조건와 사용자의 전제 조건이 맞지 않아 서버에서 응답 거부를 할 때 쓰는 코드이다.
  • 413 Payload Too Large(요청이 너무 긺)[11] : 요청 본문이 너무 긴 경우 발생한다. 서버 소프트웨어로 엔진엑스를 사용하는 경우 기본 설정 그대로 사용하면 큰 첨부 파일을 올릴 때 이 오류 코드가 발생하게 된다.구글로 구현.
  • 414 URI Too Long(URI가 너무 긺): URI[12]가 너무 길 때 발생한다. 흔히 볼 수 있는 사례는 URL이 너무 긴 경우이다. 구현 페이지
  • 415 Unsupported Media Type(지원하지 않는 미디어 타입): 사용자가 요청한 미디어 타입이 서버에서 지원하지 않는 타입이라서 응답을 거부할 때 쓰는 코드이다.
  • 416 Requested Range Not Satisfiable(요청 범위 부적합): 요청 헤더의 Range로 지정한 범위가 잘못되었을 때 발생한다.
  • 417 Expectation Failed(예측 실패): 요청 헤더의 Expect값이 서버에서는 적절하지 못하다는 것을 응답할 때 쓰는 코드이다.
  • 418 (Unused)[영구결번]
  • 421 Misdirected Request(잘못된 요청): 서버로 유도된 요청된 응답을 서버에서 생성할 수 없을 때 응답하는 코드로 주로 TLS 인증서가 여러 개 설치된 상태에서 꼬였을 경우 뜨는 오류다. 참고
  • 422 Unprocessable Entity(처리할 수 없는 개체)[WebDAV]: 요청을 잘 받았으나 문법 오류로 인하여 무언가를 응답할 수 없을때 사용되는 코드이다.
  • 423 Locked(잠김)[WebDAV]: 요청한 리소스가 잠겨있을 때 뜨는 코드이다.
  • 424 Failed Dependency(실패한 종속성)[WebDAV]: 이전의 요청이 실패한 상태에서 지금의 요청도 실패한 경우 뜨는 코드이다. 간단히 말해 요청 연속 실패.
  • 425 Too Early(너무 일찍요청) : 서버가 재생될 수 있는 요청을 처리하는 데 위험을 감수하지 않는다는 걸 알릴 때 사용되는 코드이다.[RFC8470] 클라이언트가 파이어폭스 58 이후 버전이 아닌 이상 제대로 해석하지는 않는다.
  • 426 Upgrade Required(업그레이드 필요): 클라이언트에서 보낸 요청의 프로토콜이 맞지 않아 현재 서버에서 처리할 수 없으나, 클라이언트가 프로토콜을 서버에서 지원하는 다른 프로토콜로 업그레이드한다면 처리해 줄 수도 있는 상황에서 쓰는 응답 코드이다. 주로 서버의 응답에는 Upgrade 헤더와 필요한 프로토콜을 같이 응답한다. 보통 HTTP/1.1인 클라이언트가 HTTP/2만 지원하는 서버에서 요청할 때 뜬다.
  • 428 Precondition Required(전제 조건 필요): 서버로 요청을 하려면 요청이 조건부이어야만 할 때 뜨는 코드이다. 사용자가 PUT 요청을 하여 서버의 값이 수정되는 동안 다른 사용자가 서버의 상태를 수정하여 발생하는 충돌인 업데이트 상실를 막기 위해서 존재하는 코드.
  • 429 Too Many Requests(너무 많은 요청): 일정 시간 동안 너무 많은 요청을 보냈을 때 이를 거부하기 위해 사용한다. 나무위키에서는 페이지 소스(/raw/문서명) 보기를 너무 자주 요청했을 때 임시 차단을 걸기 위해 사용되며 대다수 API에서 요청 제한을 나타내기 위해 사용한다. 서비스 거부 공격을 방어하는 데에도 사용할 수 있다.
  • 431 Request Header Fields Too Large(요청 헤더 필드가 너무 큼): 요청한 헤더값이 너무 커서 서버에서 처리를 하지 않는다는 걸 응답할 때 쓰는 코드이다. 보통 크기가 큰 쿠키와 캐시가 너무 쌓여 있는 상태에서 서버에 요청할 때 뜨는 오류이다. 그리고 사용자 에이전트 변경 프로그램으로 UA를 너무 길게 설정했을 때도 나온다. 캐시 및 쿠키를 정리하면 대부분 정상적으로 서버에서 응답한다.
  • 451 Unavailable For Legal Reasons(법적인 이유로 차단됨): 국가 검열 등, 법적인 이유로 차단되었을 경우 사용할 수 있도록 정의된 코드다. 서버는 Link 헤더로 차단된 근거가 되는 주소를 보낼 수 있다. 오류 코드는 검열을 비판하는 소설인 화씨 451에서 따온 것으로, 출처가 출처인 만큼 검열을 위한 코드지만 실제로 이 코드를 사용하도록 규정하는 국가는 없고[18], 대부분의 사이트에서는 사용하지 않는다. 다만, 아카라이브에서는 2024년 1월 18일부터 비로그인 상태로 성인 채널을 들어갈 경우 451 에러가 뜬다.

2.5. 5XX

서버 오류: 서버가 응답할 수 없다는 의미이며, 요청이 올바른지의 여부는 알 수 없다.
  • 500 Internal Server Error(내부 서버 오류): 서버에 오류가 발생해 작업을 수행할 수 없을 때 사용된다.
    • 주로 서버 설정, 퍼미션 등의 문제로 발생하는데, 서버 설정이 잘못되었거나 서버가 접근하려 했던 리소스가 운영 체제 내 권한 문제로 막힌 경우 등에 발생한다.
    • 코드 작성이 잘못된 경우에도 발생한다. HTTP 요청을 통해 호출한 문서가 실제 HTML 문서가 아니라 JSP, PHP, 서블릿 등의 프로그램일 경우 그 프로그램이 동작하다 세미콜론빼먹는 등의 각종 에러로 비정상 종료를 하는 경우 이 응답 코드를 보낸다.
    • 예외 처리를 지원하는 언어의 경우 처리 도중 발생한 예외가 서버 내에서 처리되지 않아 발생할 수도 있다. Spring으로 구현하는 경우 예외가 처리되지 않으면 기본 응답으로 스택 추적을 보내는데, 리소스 유출 등 보안 문제가 발생할 여지가 충분하므로, 기본 응답을 다른 방식으로 보내게 하는 등으로 서버를 수정해야 한다.
  • 501 Not Implemented(요청한 기능 미지원): 서버가 요청을 수행하는데 필요한 기능을 지원하지 않는 경우 사용된다. 서버에서 의도적으로 기능을 지원하지 않는 경우를 제외하고는 웬만해서는 볼 수 없다.
  • 502 Bad Gateway(게이트웨이 불량): 게이트웨이가 연결된 서버로부터 잘못된 응답을 받았을 때 사용된다.
  • 503 Service Temporarily Unavailable(일시적으로 서비스를 이용할 수 없음): 서비스를 일시적으로 사용할 수 없을 때 사용된다. 주로 웹서버 등이 과부하로 다운되었을 때 볼 수 있다.
  • 504 Gateway Timeout(게이트웨이 시간 초과): 게이트웨이가 연결된 서버로부터 응답을 받을 수 없었을 때 사용된다.
  • 505 HTTP Version Not Supported(지원되지 않는 HTTP 버전): HTTP 버전을 서버가 처리할 수 없다. 브라우저는 서버가 처리 가능한 HTTP 버전을 자동으로 선택하므로, 볼 일이 거의 없는 오류이다.
  • 506 Variant Also Negotiates: 서버 내부 구성(값)에 오류가 있어 반환되는 값에 콘텐츠 협상이 순환 참조로 이루어져 있다는걸 알려주는 코드.
  • 507 Insufficient Storage[WebDAV]: 서버 내부 구성(값)에 오류가 있어 선택된 가변 리소스는 투명한 콘텐츠 협상에 참여하도록 구성되므로 협상 과정에서 적절한 끝점이 아님을 알려주는 코드.
  • 508 Loop Detected (무한 루프 발견)[WebDAV]: 서버가 요청을 처리하는 동안 무한 루프를 발견하였을 때 뜨는 응답 코드.
  • 510 Not Extended(확장되지 않았음): 서버가 요청을 처리할 때 요청에 대한 추가 확장이 필요한경우 뜨는 응답 코드.
  • 511 Network Authentication Required(네트워크 인증 필요): 사용자가 네트워크 엑세스 권한이 필요한 경우 뜨는 응답 코드. 보통 네트워크에 엑세스할 때 로그인이 필요한 경우 주로 뜬다.

3. 비표준 응답 코드

비표준 응답 코드는 표준에 정의되어 있지 않은 응답을 처리하고 싶을 때 사용하거나, 보안상의 이유로 표준 응답 코드를 회피하고 싶을 때 사용한다. 6XX 이후의 영역은 사용자 정의 영역으로 사용된다.

3.1. 1XX

  • 110 Response is Stale(응답이 부실함)[RFC7234]
  • 111 Revalidation Failed(유효성 재확인 실패)[RFC7234]
  • 112 Disconnected Operation(연결되지 않은 작동)[RFC7234]
  • 113 Heuristic Expiration(휴리스틱 만료)[RFC7234]
  • 199 Miscellaneous Warning(기타 경고)[RFC7234]

3.2. 2XX

  • 214 Transformation Applied(변환 적용)[RFC7234]
  • 299 Miscellaneous Persistent Warning(기타 지속적인 경고)[RFC7234]

3.3. 3XX

  • 300 Multiple Options(복수 옵션)[HTCPCP]: HTCPCP-TEA 프로토콜에서 정의, 실제 300 코드랑 살짝 메시지가 다르며 이 메시지는 실제 웹상에서 사용된 경우는 없다.
  • 305 Use Proxy(프록시 사용): 프록시를 사용하지 않으면 접근할 수 없는 콘텐츠에 사용할 목적으로 만들어졌다. 이 응답 코드에는 요청자가 사용해야 하는 프록시 서버의 정보를 포함할 수 있다. 다만 보안상 이유로 이 응답 코드를 인식하는 브라우저는 없고 현재 사용 중지(Deprecated)된 비권장 응답 코드이다.
  • 306 Switch Proxy(프록시 전환): 초기 HTTP/1.1의 코드. HTTP1.1 305/306 응답 초안에 Switch Proxy 요청으로 다음 요청시 지정한 프록시 서버를 사용하라는 응답 코드로 할당되었으나 정작 사용이 되지 않았고 영구 결번이 되었다.

3.4. 4XX

  • 403 Forbidden(거부됨)[HTCPCP]: HTCPCP-TEA 프로토콜에서 정의된 코드, RFC 9110에서 정식 코드로 편입되었다.
  • 406 Not Acceptable(받아들일 수 없음)[HTCPCP] : HTCPCP 프로토콜에서 정의된 코드, RFC 9110에서 정식 코드로 편입되었다.
  • 418 I'm a teapot(찻주전자로 커피를 만들 수 없음)[HTCPCP]: HTCPCP 프로토콜에서 정의된 대표 코드(...)
    • 정식 코드가 아니지만 RFC 2324 발표 이후 많은 수의 서버에서 농담성이나 이스터 에그로 이 코드를 구현하였다. 대표적으로 구글에서는 이스터 에그로 페이지를 만들었는데, 페이지만 저런 게 아니라 진짜로 418을 반환한다. 하도 많이 써서 진절머리가 난(...) 탓에 결국 RFC 9110에서 영구 결번으로 지정되었지만, 이에 반발하는 운동으로 Save 418 Movement가 있었고, 이 운동이 성공해 Python의 requests 같은 대부분의 라이브러리에서 418 상태 코드가 남아 있다. (영문 위키백과 참고)
    • 요청을 깡그리 무시하고 싶을 때 418을 반환하는 일도 있다. 모질라에 따르면 자동화 쿼리 등에 대응하기 위해 일부러 418을 반환한다고.
  • 419 Page Expired(페이지 만료됨): Laravel 프레임 워크에서 쓰는 비표준 응답 코드.
  • 420 Enhance Your Calm(침착함을 길러라): X(SNS)의 초기 API에서 사용하던 비표준 응답 코드. 클라이언트가 API 리밋에 도달할 경우에 사용되었으나, 표준 코드인 429 Too Many Requests가 나오자 이쪽으로 대체되었다.
  • 420 Method Failure(메서드 실패): Spring에서 쓰는 비표준 응답 코드.
  • 430 Request Header Fields Too Large(요청 헤더 필드가 너무 큼): shopify에서 쓰는 비표준 응답 코드.
  • 440 Login Time-out(로그인 시간 초과)[IIS]
  • 444 No Response(무응답)[NGINX]: 실제로는 응답하지 않고 내부적으로만 이용된다.
  • 449 Retry With(재시도)[IIS]: 사용자가 필수 정보를 제공하지 않았을 때 사용한다.
  • 450 Blocked by Windows Parental Controls(Windows 자녀 보호 기능에 의해 차단됨): Microsoft에서 쓰는 비표준 응답 코드.
  • 451 Redirect(리디렉션)[IIS]
  • 460[AWS]: 유효 제한 시간이 경과하기 전에 클라이언트가 로드 밸런서와의 연결을 종료할 때 사용한다.
  • 463[AWS]: 로드 밸런서가 30개가 넘는 IP 주소가 포함된 X-Forwarded-For 요청 헤더를 수신할때 사용한다.
  • 464[AWS]: 서로 프로토콜 버전이 호환되지 않을 때 사용한다.
  • 494 Request header too large(요청 헤더가 너무 큼)[NGINX]
  • 495 SSL Certificate Error(SSL 인증서 오류)[NGINX]
  • 496 SSL Certificate Required(SSL 인증서 필요)[NGINX]
  • 497 HTTP Request Sent to HTTPS Port(HTTPS 포트로 전송된 HTTP 요청)[NGINX]
  • 498 Invalid Token(잘못된 토큰): ArcGIS for Server에서 쓰는 비표준 응답 코드.
  • 499 Token Required(토큰 필요): ArcGIS for Server에서 쓰는 비표준 응답 코드.
  • 499 Client Closed Request(클라이언트 종료 요청)[NGINX]

3.5. 5XX

  • 509 Bandwidth Limit Exceeded(대역폭 제한 초과): 아파치 HTTP 서버와 CPanel에 쓰는 비표준 응답 코드, 설정한 대역폭 제한을 초과 시 사용된다. 해당 서버를 사용하는 웹 호스팅를 사용하는 경우가 많아진 지금은 사실상 표준 응답 코드로 사용된다.
  • 520 Web Server Returned an Unknown Error(웹 서버에서 알 수 없는 오류를 반환)[Cloudflare]: ModSecurity Denial of Service (DoS) attack identified from로 인하여 차단이 있음. 웹 서버 로그를 확인할 것.
  • 521 Web Server Is down(웹 서버가 내려감)[Cloudflare]: 웹 서버가 가동 중이지 않을 때 나타난다.
  • 522 Connection Timed Out(연결 시간 초과)[Cloudflare]
  • 523 Origin Is Unreachable(원본에 도달할 수 없음)[Cloudflare]
  • 524 A Timeout Occurred(시간 초과 발생)[Cloudflare]
  • 525 SSL Handshake Failed(SSL 핸드셰이크 실패)[Cloudflare]: 서버와 사용자 간에 SSL/TLS Handshake[50]을 할 수 없을 때 뜨는 코드로 주로 TLS를 설정을 안 하고 HTTPS 접속이 안 되는 서버 상태에서 Cloudflare SSL 구성값에 오류가 생긴 경우에 주로 뜬다.
  • 526 Invalid SSL Certificates(유효하지 않은 SSL 인증서)[Cloudflare]: 서버의 SSL 인증서의 유효성을 검증할 수 없고 인증서가 잘못되었을 때 뜬다.
  • 527 Railgun Error(레일건 오류)[Cloudflare]: 원본 서버랑 레일건 서버를 연결할 수 없을 때 쓴다.
  • 529 Site Is Overloaded(사이트가 과부하 상태임): SSLLabs 서버 테스트 API에서 쓰는 비표준 응답코드.
  • 530 Site Is Frozen(사이트가 정지됨): Pantheon Systems에서 쓰는 비표준 응답 코드.
  • 530[Cloudflare]
  • 561 Unauthorized(권한 없음)[AWS]
  • 598 Network Read Timeout Error(네트워크 읽기 시간 초과 오류): 사실상 표준으로 쓰인다.
  • 599 Network Connect Timeout Error(네트워크 연결 시간 초과 오류): 사실상 표준으로 쓰인다.

3.6. 6XX 이후

HTTP 응답 코드는 1XX ~ 5XX 대역에 대해서만 정의되어 있지만, 명확한 제한은 없기 때문에 일부 프로그램에서는 6XX 이후의 대역을 사용하기도 한다. (예시) 대표적으로 Dynatrace의 keynote systems 등이 있다.
  • 999 Request Denied (요청 거절됨): 사실상 표준, 다양한 상황에 쓰인다.
    • LinkedIn 등에서는 웹 크롤러 등 블랙리스트에 있는(또는 화이트리스트에 없는) 클라이언트에서 요청을 받았을 경우 이를 거절할 목적으로 사용한다.
    • 서버에서 응답을 하지 않아 응답 코드를 특정할 수 없는 경우 플레이스홀더 차원에서 사용하기도 한다.

4. 여담

응답 코드별로 강아지고양이 사진을 붙인 사이트들이 있다. 303번(...) 400번 고양이는 엿을 날리고 있다...
[1] 여담으로 2019년 기준 Express.js 서버에서 100 코드를 보내게 만들면 브라우저가 로딩만 하다가 오류를 표시한다.[2] 요청 메시지의 첫 부분이 서버에 도착하였으며 클라이언트는 정상적으로 계속 요청할 수 있음.[3] 서버는 Upgrade 헤더에 정의된 프로토콜을 변환(Switching Protocol)하기 위해 클라이언트의 요청을 수락하였음. 을 의미한다. 쉽게 생각해서 클라이언트가 HTTP/1.1을 Web Socket으로 변환을 요청하였으며 서버가 이를 수락하고 변환을 진행할 준비가 되었다는 것을 의미한다.[WebDAV] WebDAV 전용 HTTP 응답 코드[5] 물론 HTTP 200을 사용해도 되지만, 오류로 인해 내용이 있어야 하는 상황에서 없는 것인지 원래 내용이 없는 것인지 확실히 하기 위해 HTTP 204를 사용한다. 요청을 받아서 결과를 가지고왔지만 내용(데이터)은 원래 없었다. 라고 이해하면 된다.[WebDAV] [WebDAV] [영구결번] 표준에서 제외된 영구 결번 코드이다. 비표준 응답 코드 문단 참조[영구결번] [10] Basic과 Digest 두 가지가 있다. Basic은 아이디와 비밀번호를 평문 그대로(!) 전송하며, Digest는 아이디와 nonce값을 이용해 해시를 만들어 전송한다.[11] 엔진엑스에서는 Request Entity Too Large(요청한 엔티티가 너무 긺)이라고 뜬다.[12] 통합 자원 식별자(Uniform Resource Identifier)란 뜻으로 URL과 같은 뜻으로 사용되나 URL의 상위 개념에 가깝다.[영구결번] [WebDAV] [WebDAV] [WebDAV] [RFC8470] https://tools.ietf.org/html/rfc8470[18] 대한민국도 warning.or.kr로 강제 이동 시키거나 TLS 핸드셰이크를 강제로 끊는 방법을 사용할 뿐 이 코드를 사용하지는 않는다.[WebDAV] [WebDAV] [RFC7234] HTTP1.1 캐싱으로 정의되었으나, 잘 사용되지 않는다는 이유로 2022년에 폐기되었다.[RFC7234] [RFC7234] [RFC7234] [RFC7234] [RFC7234] [RFC7234] [HTCPCP] 하이퍼텍스트 커피 포트 제어 프로토콜(HTCPCP, RFC 2324)HTCPCP-TEA 프로토콜(RFC 7168)에서 정의된 코드. 둘 다 만우절 장난으로 만든 것으로, RFC 2324는 1998년에, RFC 7168은 2014년에 공개되었다.[HTCPCP] [HTCPCP] [HTCPCP] [IIS] 인터넷 정보 서비스에서 사용하는 비표준 응답 코드.[NGINX] NGINX에서 사용하는 비표준 응답 코드[IIS] [IIS] [AWS] AWS에서 사용하는 비표준 응답 코드[AWS] [AWS] [NGINX] [NGINX] [NGINX] [NGINX] [NGINX] [Cloudflare] Cloudflare에서 쓰는 비표준 응답 코드[Cloudflare] [Cloudflare] [Cloudflare] [Cloudflare] [Cloudflare] [50] SSL/TLS로 접속할 때 하는 신원 확인 과정.[Cloudflare] [Cloudflare] [Cloudflare] [AWS]

분류