상위 문서: HTTP
1. 개요
HTTP 응답 코드를 정리하는 문서.MDN Web Docs나 2024년 9월 현재 최신 문서인 RFC 9110, http.dev의 문서에서 찾을 수 있다.
응답 코드는 보통 아래와 같이 분류되어 있다.
- 1XX: 정보 전달, 작업을 진행하고 있음을 의미
- 2XX: 성공, 작업을 성공적 처리했음을 의미
- 3XX: 리다이렉션, 요청 완료를 위해 리다이렉션이 이루어져야 한다는 의미
- 4XX: 클라이언트 오류, 클라이언트에서 요청한 내용이 올바르지 않다는 의미
- 5XX: 서버 오류, 서버에서 요청을 처리할 수 없었음을 의미
- 6XX 이후: 정의되지 않음, 사용자 정의 영역에 해당한다.
2. 표준 응답 코드
2.1. 1XX
정보 전달: 요청을 받았고, 작업을 진행 중이라는 의미이다. HTTP/1.0 이후 한동안 쓰이지 않아 서버도 클라이언트에 이 코드를 보내지 않았지만, 101의 경우 WebSocket 등에서, 103의 경우 페이지 로드 속도를 빠르게 하기 위해서 다시 쓰이기 시작했다.[1]- 100 Continue
- 101 Switching Protocols
- 102 Processing[WebDAV]: 사용자가 수신 요청을 하여 처리하고는 있지만 아직은 제대로 된 응답을 할 수 없는 상태임을 응답하는 코드이다.
- 103 Early Hints: Link 헤더와 함께 사용되며 주로 서버가 응답을 준비하는 동안 사용자가 사전 로딩(PreLoading)을 할 수 있도록 하는 응답 코드.
2.2. 2XX
성공: 이 작업을 성공적으로 받았고, 이해했으며, 받아들여졌다는 의미이다. 200, 201, 204, 206이 주로 사용되며, 나머지는 볼 일이 거의 없다.- 200 OK: 성공적으로 처리했을 때 쓰인다. 가장 일반적으로 볼 수 있는 HTTP 상태.
- 201 Created: 요청이 성공적으로 처리되어서 리소스가 만들어졌음을 의미한다.
- 202 Accepted: 요청이 받아들여졌지만 처리되지 않았음을 의미한다.
- 203 Non-Authoritative Information : 응답받은 메타 정보가 서버에 저장된 원본하고는 동일하지는 않지만 로컬이나 다른 복사본에서 수집되었음을 알리는 응답 코드. 이 경우에도 보통은 200 OK 응답 코드가 203 Non-Authoritative Information 응답 코드보다 우선적으로 응답한다.
- 204 No Content: 성공적으로 처리했지만 콘텐츠를 제공하지는 않는다. 일반 사용자가 볼 일은 매우 드문 코드며 처리 결과만 중요한 API 요청 등에서 주로 사용한다.[3]
- 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(권한 없음): 인증이 필요한 리소스에 인증 없이 접근할 경우 발생한다. 이 응답 코드를 사용할 때에는 반드시 브라우저에 어느 인증 방식[8]을 사용할 것인지 보내야 한다. 단순히 권한이 없는 경우 이 응답 코드 대신 아래 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(요청이 너무 긺)[9] : 요청 본문이 너무 긴 경우 발생한다. 서버 소프트웨어로 엔진엑스를 사용하는 경우 기본 설정 그대로 사용하면 큰 첨부 파일을 올릴 때 이 오류 코드가 발생하게 된다. 구글로 구현.
- 414 URI Too Long(URI가 너무 긺): URI[10]가 너무 길 때 발생한다. 흔히 볼 수 있는 사례는 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에서 따온 것으로, 출처가 출처인 만큼 검열을 위한 코드지만 실제로 이 코드를 사용하도록 규정하는 국가는 없고[16], 대부분의 사이트에서도 사용하지 않는다. 다만,
아카라이브에서는
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[48]을 할 수 없을 때 뜨는 코드로 주로 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 등이 있다.4. 여담
응답 코드별로 강아지나 고양이 사진을 붙인 사이트들이 있다.
[1]
여담으로 2019년 기준 Express.js 서버에서 100 코드를 보내게 만들면 브라우저가 로딩만 하다가 오류를 표시한다.
[WebDAV]
WebDAV 전용 HTTP 응답 코드
[3]
물론 HTTP 200을 사용해도 되지만, 오류로 인해 내용이 있어야 하는 상황에서 없는 것인지 원래 내용이 없는 것인지 확실히 하기 위해 HTTP 204를 사용한다.
[WebDAV]
[WebDAV]
[영구결번]
표준에서 제외된 영구 결번 코드이다. 비표준 응답 코드 문단 참조
[영구결번]
[8]
Basic과 Digest 두 가지가 있다. Basic은 아이디와 비밀번호를 평문 그대로(!) 전송하며, Digest는 아이디와 nonce값을 이용해 해시를 만들어 전송한다.
[9]
엔진엑스에서는 Request Entity Too Large(요청한 엔티티가 너무 긺)이라고 뜬다.
[10]
통합 자원 식별자(Uniform Resource Identifier)란 뜻으로 URL과 같은 뜻으로 사용되나 URL의 상위 개념에 가깝다.
[영구결번]
[WebDAV]
[WebDAV]
[WebDAV]
[RFC8470]
https://tools.ietf.org/html/rfc8470
[16]
대한민국도
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]
[48]
SSL/TLS로 접속할 때 하는 신원 확인 과정.
[Cloudflare]
[Cloudflare]
[Cloudflare]
[AWS]