과거의 내가 미래의 나에게
HTTP 학습 (4-5) - 상태 코드(5xx번대) 본문
드디어 상태코드의 마지막인 500번대를 살펴보고 HTTP를 마무리하겠다!
5xx (Server Error): 서버의 오류로 인해 요청을 처리할 수 없거나 하지 않음
500번대 상태 코드는 서버 내부의 오류로 인해 클라이언트의 요청을 처리하지 못하고 반환하는 코드이다.
■ 500 (Internal Server Error): 요청을 처리하는 과정에서 서버가 예상하지 못한 상황에 놓였다는 상태 코드이다.
이는 특별한 뜻이 담겨있다기 보단 서버 에러를 총칭하는 일반적인 응답으로 500번대 상태코드 중 적절한 것이 없다면 사용된다. 서버에서 나는 모든 에러를 다 지정할 수는 없기에 정확히 어떤 문제인지는 규정이 안되었지만 어찌되었든 서버에서 에러가 발생했다는 것을 알리는 것이다.
■ 501 (Not Implemented): 서버가 클라이언트의 요청을 수행할 수 있는 기능이 없다는 것을 알리는 것이다.
클라이언트가 아직 서버에서 구현되지 않은 기능을 요청했을 때 해당 상태코드를 내보내며, 추후 기능이 개발될 여지가 있다면 클라이언트에게 다시 시도할 시기를 알려주는 Retry-After 헤더를 같이 전송해줄 수 있다.
비슷한 것으로 405 상태코드가 존재하는데, 405는 클라이언트가 요청한 메서드를 알고 있지만 해당 기능을 지원하지 않는다는 것이고, 501은 클라이언트가 요청한 메서드가 존재하는지 확인할 수 없어서 지원해줄 수 없음을 의미한다.
■ 502 (Bad Gateway): 중간에 있는 서버가(프록시 서버 또는 게이트웨이) 원 서버로부터 잘못된 응답을 받았을 때의 상태코드이다.
원 서버가 너무 많은 요청을 처리하고 있어서 중간 서버의 요청에 제대로 응답하지 못하거나, 원 서버에 연락조차 안되거나, 원 서버와 중간 서버의 네트워크 연결에 문제가 있는 등, 중간 서버와 원 서버의 교류에 문제가 있을 때 반환하는 상태이다.
■ 503(Service Unvailble): 서버가 요청을 처리할 준비가 안되었을 때 반환하는 상태 코드이다.
서버에 과부하가 걸렸거나 혹은 서버가 점검 중일 때 반환하는 것으로 지금 일시적으로 응답할 수 없다는 의미이다. 서버가 다시 요청 가능한 때를 알고 있다면 Retry-After 헤더를 응답에 포함시킬 수도 있다.
■ 504(Gateway Timeout): 중간에 있는 서버가(프록시 서버 또는 게이트웨이) 원 서버로부터 응답을 기다리다 타임아웃이 발생했을 때 반환하는 상태 코드이다.
■ 505(HTTP Version Not Supported): 클라이언트 요청의 HTTP 버전을 서버가 지원하지 않을 때 반환하는 상태 코드이다.
426 상태코드는 클라이언트가 서버에 특정 프로토콜로 요청을 처리해달라 보냈을 때 이를 거절하는 상태코드였는데 505 상태코드가 유사하여 살펴보니 아마 이런 차이가 있는 듯하다. 426은 일단 HTTP버전이 아닌 프로토콜이기도 하고, 또 단순히 요청을 거절하는 것이 아닌 upgrade가 필요함을 알려주는 상태코드이다. 반면 505는 클라이언트이 요청 HTTP를 지원하지 않음을 알려주는 상태 코드로 업그레이드하고 자시고가 아니라 그냥 지원 안하고있으니 그리 알라는 느낌인듯 하다.
■ 506(Variant Also Negotiates): 콘텐츠 협상과 관련있는 상태 코드로, 표준이 아닌 응답 코드라 한다.
■ 507(Insufficient Storage): 서버에 공간 부족으로 처리에 실패했다는 상태 코드로, WebDAV 전용이다.
■ 508(Loop Detected): 리소스간에 무한 루프를 감지했다는 상태 코드로, WebDAV 전용이다.
■ 510(Not Extended): 추가 확장이 필요하는 상태 코드로, 표준이 아닌 응답 코드라 한다.
■ 511(Network Authentication Required): 클라이언트가 네트워크에 접근하기 위해서는 인증을 받아야 한다는 상태 코드이다.
지하철같은 곳에서 네트워크 연결하고 웹 접속 시 내가 가려던 페이지가 아닌 네트워크 로그인 화면이 나올 때가 있는데 그 경우가 바로 이 상태 코드와 관련되어있다.
■ 599(Network Connect Timeout Error): 네트워크 연결이 타임아웃 되었음을 의미하고, 표준이 아닌 응답 코드라 한다.
참고 문서
- 5XX (Server Error) 상태 코드 - 총정리 모음 - https://inpa.tistory.com/entry/HTTP-%F0%9F%8C%90-5XX-Server-Error-%EC%83%81%ED%83%9C-%EC%BD%94%EB%93%9C-%EC%A0%9C%EB%8C%80%EB%A1%9C-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0
- mdn web docs - https://developer.mozilla.org/ko/docs/Web/HTTP/Status/500