공부하다보면, 아니면 가끔 일생생활 속에서도 404, 500에러 등을 접해본 적이 있을것이다.
이런 에러코드(4xx, 5xx), 또는 상태를 알려주는 여러 코드들이 존재한다.
1xx ~ 5xx의 형태로 앞자리 숫자에 따라 크게 다섯가지로 분류된다.
첫자리의 의미
- 1xx (정보): 요청을 받았으며 작업을 계속 진행
- 2xx (성공): 요청을 성공적으로 받았으며 처리함
- 3xx (리다이렉션): 요청 완료를 위해 추가 동작이 필요함
- 4xx (클라이언트 오류): 클라이언트의 요청이 잘못되었거나 오류가 있음
- 5xx (서버 오류): 서버가 유효한 요청을 처리하지 못함
1xx
- 100 : 클라이언트는 요청을 계속해야 한다. 서버는 이 코드로 반환함으로써 요청의 일부분을 받았으며 나머지 부분이 필요하다는 것을 알린다.
- 101 : (프로토콜 전환) 클라이언트가 서버에 프로토콜 전환을 요청, 서버는 이를 승인하는 중이다.
- 102 : 서버가 요청을 받았지만, 아직 올바른 응답을 반환할 수 없다.
2xx
- 200 : (성공) 올바른 요청과, 응답 처리가 완료되었음, 주로 요청된 페이지를 반환했다는 의미로 사용됨. 가장 흔하게 볼 수 있는 응답코드.
- 201 : (생성완료) 성공적으로 요청되었으며 서버에서 새로운 리소스를 생성함.
- 202 : (허용) 서버가 요청을 접수했지만 아직 처리하지 않음.
- 203 : (신뢰할 수 없는 정보) 서버가 요청을 성공적으로 처리했지만 다른곳에서 수신된 정보를 제공하고 있다.
- 204 : (콘텐츠 없음) 서버가 요청을 성공적으로 처리했지만 콘텐츠를 제공하지 않음.
- 205 : (새로고침 필요) 서버가 요청을 성공적으로 처리했지만 콘텐츠를 표시하지 않음.
(204 응답과 달리 이 응답은 요청자가 문서보기를 재설정할 것을 요구 ex.form 양식 비우기).
- 206 : (일부만 제공) 서버가 GET 요청의 일부분만 성공적으로 처리했다.
- 207 : 여러 리소스가 여러 상태코드인 상황이 적절한 경우.
이 코드는 WebDAV에 사용됨.
- 208 : DAV 바인딩 멤버는 이미 응답의 앞 부분에 열거되어 있으며 다시 포함되지 않음.
(207 과 마찬가지로 WebDAV 전용)
- 226 : 서버가 사용자의 GET 요청에 대한 의무를 다했으며, 현재 인스턴스에서 하나 이상의 인스턴스 조작 결과를 보낼 때 사용됨. HTTP Delta Encoding 전용.
3xx
- 300 : (복수응답) 서버에서 여러 개의 응답이 있음.
(응답을 선택하는 방법은 표준화되지 않아 잘 사용되지 않음)
- 301 : (영구이동) 영구적으로 컨텐츠가 이동됨.
- 302 : 일시적으로 컨텐츠가 이동됨.
- 303 : 서버가 사용자의 GET 요청을 처리하여 다른 URL에서 요청된 정보를 가져올 수 있도록 응답하는 코드. HEAD 요청 이외의 모든 요청을 다른 위치로 자동으로 전달됨.
- 304 : 브라우저에서 캐시된 페이지를 버전이 호출됨.
- 305 : (프록시 사용) 클라이언트는 프록시를 사용하여 요청한 페이지만 액세스가 가능.
서버가 이 응답을 반환하면 사용할 프록시 서버의 정보도 포함되어 있을 수 있음.
현재 사용중지(Deprecated)된 비권장 응답코드
- 307 : (임시 리다이렉션) 302와 동일하게 일시적인 컨텐츠 이동을 나타내지만,
HTTP 메소드의 변경을 허용하지 않아 추후 원래 위치에서 계속해야함.
- 308 : (영구 리다이렉션) 307과 같이 HTTP 메소드의 변경을 허용하지 않고, 영구적인 컨텐츠 이동을 나타냄.
4xx
- 400 : 잘못된 요청을 나타냄.
- 401 : (권한없음) 로그인 등의 인증을 거치지 않을 경우 나타남.
- 402 : (결재필요) 결재가 필요한 리소스에 접근했을 경우 나타남. 현재는 거의 사용하지 않고 추후에 사용하기 위해 예약해둔 코드. 표준도 현재 존재하지 않는다.
- 403 : (거부) 서버에서 요청을 거부할 경우 나타남. 권한이 없을때도 나타날 수 있는데 401코드와는 다르게 인증여부와는 무관하다.
- 404 : (찾을 수 없음) 가장 많이 접할 수 있는 코드중 하나로 찾는 리소스가 없을때 나타남.
- 405 : (허용되지 않음) 서버에서 허용되지 않은 메소드로 요청시 나타남.
- 406 : 올바른 요청을 전송했으나 서버에서 받아들일 수 없을 경우 나타남. 방화벽에 경우가 가장 흔함.
- 407 : 프록시 인증이 필요할 경우 나타남.
- 408 : (시간 초과) 요청 중 시간이 초과되었을때 나타남.
- 409 : (충돌) 사용자의 요청이 서버와 충돌을 일으킬 경우 나타남.
- 410 : (사라짐) 404와는 달리 요청한 리소스가 사라진 경우를 나타냄, 만약 리소스가 이동되었을 경우 301을 사용하여 새 위치를 지정해야 하며 주로 검색엔진결과에서 해당 주소가 사라졌을때 나타남.
- 411 : 서버에 요청시 Content-Length 값을 지정하지 않아 서버에서 응답을 거부함.
- 412 : (전제조건 실패) 보통 요청 시 Request Header의 필요한 데이터가 충족하지 않을 때 나타남.
- 413 : 요청 Body가 너무 길 때 나타남. 가끔 동영상 등의 대용량 파일을 서버로 전송할 때 나타나며, 서버에 의해 정의된 제한을 따른다.
- 414 : URL이 너무 길 때 나타남.
- 415 : 서버에서 지원하지 않는 타입의 미디어타입을 요청할 때 나타남.
- 416 : 요청 Header의 Range가 잘못되었을 때 나타남.
- 417 : (예측실패) 헤더의 Expect값이 서버에서 적절하지 않을 때 나타남.
- 418 : 만우절 장난으로 만들어진 HTCPCP 프로토콜 사용시 나타남.
실제로 구현이 가능하다고 함.
- 420 : 비공식적인 코드이며 Twitter에서 API 사용량이 한계치에 도달했을 경우 나타났다.
추후 429코드의 등장으로 사용되지 않는다.
- 421 : (잘못된 요청) 보통 페이지에 TLS암호화를 여러개 적용하고 꼬였을 경우 자주 나타나며 클라이언트에게 잘못된 서버에 연결되어 있을때 나타남.
- 422 : WebDAV전용으로 문법오류로 인해 서버가 응답할 수 없을 때 나타남.
- 423 : WebDAV전용으로 요청한 리소스가 잠겨있을때 나타남.
- 424 : WebDAV전용, 이전에 실패한 요청이 여전히 실패하는 경우 나타남.
- 425 : 현재 파이어폭스 브라우저를 제외한 다른 브라우저에서는 지원하지 않으며 너무 일찍 서버에 요청을 보냈을때 나타남.
(참고)
- 426 : 클라이언트 요청의 프로토콜이 올바르지 않아서 서버에서 처리할 수 없지만, 프로토콜을 업그레이드 한다면 처리할 수도 있을때 나타남, 주로 HTTP/1.1인 클라이언트가 HTTP/2만 지원하는 서버에서 요청할 때 나타남.
- 428 : 서버로 요청을 보낼때, 요청이 조건부여야만 할때, 보통 PUT 메소드 등으로 데이터가 수정중일때 업데이트 상실을 막기 방지할 때 나타남.
- 429 : 일정 시간 동안 너무 많은 요청을 보내서 서버가 거부할 때 나타남. 보통 대부분의 API에서 요청을 제한할 때 나타남.
- 430 : 비공식적인 코드이며 429코드와 유사하게 많은 요청을 보낼때도 나타날 수 있지만, 431코드와 유사하게 요청 Header의 값이 너무 클 때도 나타날 수 있다.
- 431 : Header의 값이 너무 클 때 나타남. 주로 쿠키, 캐시가 많이 쌓여있을때 나타날 수 있다.
- 451 : 정부기관의 검열 또는 법적인 이유로 응답할 수 없을 때 나타남, 잘 사용하지는 않으며 한국의 경우 보통 http://warning.or.kr/ 로 리다이렉트 된다.
5xx
구어적으로 '서버가 터졌다' 라고 표현하는 경우가 있는데 보통 아래의 코드들 (특히 500, 502, 503 등의 코드를 접하는 경우가 있다.)
- 500 : 서버에 오류가 발생해 요청을 처리할 수 없을때 나타남.
- 501 : (요청 미지원) 서버가 요청을 처리하는데 필요한 기능을 지원하지 않을 경우 나타남.
- 502 : 게이트웨이가 서버로부터 잘못된 응답을 받았을 때 사용됨. 500과 비슷하게 서버가 터졌을 때 접하는 경우가 있음.
- 503 : 일시적으로 사이트의 서비스를 이용할 수 없을때 나타남. 보통 서버의 과부하, 또는 어떤 이유로 다운되었을 때 나타난다.
- 504 : 게이트웨이가 서버에서 응답을 받을 수 없을 때 나타남.
- 505 : HTTP 버전을 서버에서 처리할 수 없을 때 나타남. 브라우저가 처리 가능한 HTTP 버전을 자동으로 선택하기 떄문에 보기 힘든 코드.
- 506 : 서버 내부 구성에서 오류가 있을 때 나타남. 보통 반환되는 값의 순환 참조가 일어날 때 주로 나타남.
- 507 : WebDAV전용, 선택된 리소스가 용량부족 등의 이유로 저장 할 수 없어서 처리할 수 없을 때 나타남.
- 508 : WebDAV전용, 서버가 요청을 처리하는 도중 무한루프가 돌 때 나타남.
- 509 : 비공식적인 코드이며 대역폭 제한을 초과했을 때 나타남. Apache HTTP 서버 등에서 사용에서 사용하던 코드였으나 웹호스팅을 사용하는 일이 많아져서 표준응답코드처럼 사용된다.
- 510 : 서버가 요청을 처리할 때 요청에 대한 추가 확장이 필요한 경우 나타남.
- 511 : (네트워크 인증필요) 네트워크 엑세스 권한을 필요로 할 때 나타남. 주로 네트워크에 로그인이 필요한 경우 나타남.
- 520 : 비공식적인 코드이며 알 수 없는 오류를 뜻한다. Cloudflare에서 자주 사용되며 웹서버 로그 확인이 필요하다.
- 521 : 비공식적인 코드이며 서버가 가동중이 아닐 때 나타남. Cloudflare에서 자주 사용.
- 522 : 비공식적인 코드이며 Cloudflare에서 자주 사용되는 접속 시간을 초과했을때 나타남.
- 525 : 비공식적인 코드이며 Cloudflare에서 자주 사용됨. 서버와 클라이언트 사이에 SSL/TLS Handshake(신원확인과정)을 할 수 없을 때 뜨는 코드, 보통 TLS를 설정을 안하고 HTTPS 접속이 안되는 서버에 Cloudflare SSL 구성값에 오류가 생긴 경우에 나타남.
- 526 : 비공식적인 코드이며 Cloudflare에서 자주 사용됨. 서버의 SSL 인증서의 유효성을 검증 할수없고 인증서가 잘못되었을때 나타남.