HTTP 상태 코드

myung hun kang·2022년 10월 29일
0

클라이언트와 서버가 서로 작업의 요청과 응답을 주고 받을 때 없어서는 안되는 코드이다.
작업에 따른 응답 상태 (성공, 클라이언트 에러, 서버 에러)를 알려주는 코드이기에 이 코드를 모른다? 혹 잘못쓰고 있다? 서버와의 통신에서 많은 불편을 겪게 될 것이다.

이번 글에서는 HTTP상태 코드들의 종류를 정리하려 한다.
모든 코드를 외울 수 있으면 짱이지만 평범한 뇌용량을 가진 평민들은 이 글을 참고만하고 공식 문서를 읽도록 하자!!

1XX : Information response

서버가 요청을 받았으며 서버에 연결된 클라이언트는 작업을 계속 진행하라는 의미

100 : Continue 계속
이 임시적인 응답은 지금까지의 상태가 괜찮으며 클라이언트가 계속해서 요청을 하거나 이미 요청을 완료한 경우에는 무시해도 되는 것을 알려준다.

101 : Switching Protocol 프로토콜 전환
이 코드는 클라이언트가 보낸 Upgrade 요청 헤더에 대한 응답에 들어가며 서버에서 프로토콜을 변경할 것임을 알려준다.

103 : Farly Hints 사전 도움
이 상태 코드는 주로 Link 헤더와 함께 사용되어 서버가 응답을 준비하는 동안 사용자 에이전트가(user agent) 사전 로딩(preloading)을 시작할 수 있도록 한다.

2XX : Successful response

요청이 성공했을때 코드

200 : Ok 성공
요청이 성공적으로 되었습니다. 성공의 의미는 HTTP 메소드에 따라 달라진다
GET:         리소스를 불러와서 메시지 바디에 전송되었습니다.
HEAD:       개체 해더가 메시지 바디에 있습니다.
PUT 또는 POST:   수행 결과에 대한 리소스가 메시지 바디에 전송되었습니다.
TRACE:       메시지 바디는 서버에서 수신한 요청 메시지를 포함하고 있습니다.

201 : Created 작성됨
요청이 성공적이었으며 그 결과로 새로운 리소스가 생성되었습니다. 이 응답은 일반적으로 POST 요청 또는 일부 PUT 요청 이후에 따라온다.

202 : Accepted 허용됨
요청을 수신하였지만 그에 응하여 행동할 수 없습니다. 이 응답은 요청 처리에 대한 결과를 이후에 HTTP로 비동기 응답을 보내는 것에 대해서 명확하게 명시하지 않습니다. 이것은 다른 프로세스에서 처리 또는 서버가 요청을 다루고 있거나 배치 프로세스를 하고 있는 경우를 위해 만들어졌습니다.

203 : Non-Authoritative Information 신뢰할 수 없는 정보
이 응답 코드는 돌려받은 메타 정보 세트가 오리진 서버의 것과 일치하지 않지만 로컬이나 서드 파티 복사본에서 모아졌음을 의미한다. 이러한 조건에서는 이 응답이 아니라 200 OK 응답을 반드시 우선된다.

204 : No Content 내용 없음
요청에 대해서 보내줄 수 있는 콘텐츠가 없지만, 헤더는 의미있을 수 있다. 사용자-에이전트는 리소스가 캐시 된 헤더를 새로운 것으로 업데이트할 수 있다.

3XX : Redirection messages

    요청 완료를 위해 추가 작업조치가 필요하다는 의미
클라이언트가 요청한 리소스가 옮겨졌거나 리소스가 삭제되었거나해서 정상적인 방법으로는 더 이상 해당 리소스에 접근할 수 없고 다른 URL을 통해서 그 리소스에 접근해야하는 경우 서버는 “여기로 가면 니가 찾는 리소스가 있어!”라는 정보를 알려줄 수 있는데, 이때 사용되는 상태 코드들이 바로 300번대 코드들이다.

301 : Moved Permanently 영구적 이동
이 응답 코드는 요청한 리소스의 URI가 변경되었음을 의미한다. 새로운 URI가 응답에서 아마도 주어질 수 있다.

304 : Not Modified 변경 없음
이것은 캐시를 목적으로 사용된다. 이것은 클라이언트에게 응답이 수정되지 않았음을 알려주며, 그러므로 클라이언트는 계속해서 응답의 캐시 된 버전을 사용할 수 있다.

4xx : Client Error

클라이언트 오류 - 요청 문법이 잘못되었거나 요청을 처리할 수 없다는 의미

400 : Bad Request 잘못된 요청
이 응답은 잘못된 문법으로 인하여 서버가 요청을 이해할 수 없음을 의미한다.

401 : Unauthorized 권한 없음
비록 HTTP 표준에서는 "미승인(unauthorized)"를 명확히 하고 있지만, 의미상 이 응답은 "비인증(unauthenticated)"을 의미합니다. 클라이언트는 요청한 응답을 받기 위해서는 반드시 스스로를 인증해야 한다.

403 : Forbidden 접근 금지
클라이언트가 접근이 금지된 리소스를 요청했음을 의미한다. 이 상태 코드는 간혹 401 Unauthorized와 헷갈리고는 하는데, 상태 코드의 의미만 보면 확실히 애매모호하지만, 사실 분명한 한 가지 차이점이 있다.

401은 말 그대로 인증되지 않았다는 것을 의미 인증이 되지 않았다는 것은 백엔드 어플리케이션이 현재 요청한 사용자가 누구인지 알 수가 없다는 것을 의미한다. 즉 이때 서버는 클라이언트에게 “너의 신원을 밝혀!”라고 말하고 있는 것이다.

그러나 403의 경우, 백엔드 어플리케이션은 현재 리소스를 요청한 사용자가 누구인지 전혀 신경쓰지 않는다. 클라이언트가 현재 자신이 누구인지 밝혔던 밝히지 않았던, 인증이 되었던 안 되었던 간에, 이 리소스를 요청하는 것은 무조건 금지라고 말하고 있는 것이다.

404 : Not Found 찾을 수 없음
서버가 요청받은 리소스를 찾을 수 없다. 브라우저에서는 알려지지 않은 URL을 의미한다. 이것은 API에서 종점(URI)은 적절하지만 리소스 자체는 존재하지 않음을 의미할 수도 있다. 서버들은 인증받지 않은 클라이언트로부터 리소스를 숨기기 위하여 이 응답을 403 대신에 전송할 수도 있다. 이 응답 코드는 웹에서 반복적으로 발생하기 때문에 가장 유명할지도 모른다.

405 : Method Not Allowed 허용되지 않은 메서드
요청한 메소드는 서버에서 알고 있지만, 제거되었고 사용할 수 없습니다. 예를 들어, 어떤 API에서 리소스를 삭제하는 것을 금지할 수 있다. 필수적인 메소드인 GET과 HEAD는 제거될 수 없으며 이 에러 코드를 리턴할 수 없다.

408 : Request Timeout 요청 시간 초과
이 응답은 요청을 한지 시간이 오래된 연결에 일부 서버가 전송하며, 어떨 때에는 이전에 클라이언트로부터 어떠한 요청이 없었다고 하더라도 보내지기도 합니다. 이것은 서버가 사용되지 않는 연결을 끊고 싶어한다는 것을 의미한다. 이 응답은 특정 몇몇 브라우저에서 빈번하게 보이는데, Chrome, Firefox 27+, 또는 IE9와 같은 웹서핑 속도를 올리기 위해 HTTP 사전 연결 메카니즘을 사용하는 브라우저들이 해당된다. 또한 일부 서버는 이 메시지를 보내지 않고 연결을 끊어버리기도 한다.

5xx : Server Error

서버가 명백히 유효한 요청에 대한 충족을 실패했다는 의미

500 : Internal Server Error 내부 서버 오류
서버가 처리 방법을 모르는 상황, 서버는 아직 처리 방법을 알 수 없다.는 뜻

501 Not Implemented 구현되지 않음
요청 방법은 서버에서 지원되지 않으므로 처리할 수 없다. 서버가 지원해야 하는 유일한 방법은 GET와 HEAD이다. 이 코드는 반환하면 안된다.

502 : Bad Gateway 불량 게이트웨이
이 오류 응답은 서버가 요청을 처리하는 데 필요한 응답을 얻기 위해 게이트웨이로 작업하는 동안 잘못된 응답을 수신했음을 의미합니다.

503 : Service Unavailable 서비스를 사용할 수 없음
서버가 요청을 처리할 준비가 되지 않았다는 뜻, 일반적인 원인은 유지보수를 위해 작동이 중단되거나 과부하가 걸렸을 때 이다. 이 응답과 함께 문제를 설명하는 사용자 친화적인 페이지가 전송되어야 한다는 점에 유의. 이 응답은 임시 조건에 사용되어야 하며, Retry-After: HTTP 헤더는 가능하면 서비스를 복구하기 전 예상 시간을 포함해야 한다. 웹마스터는 또한 이러한 일시적인 조건 응답을 캐시하지 않아야 하므로 이 응답과 함께 전송되는 캐싱 관련 헤더에 대해서도 주의해야 한다.

504 : Gateway Timeout 게이트웨이 시간초과
이 오류 응답은 서버가 게이트웨이 역할을 하고 있으며 적시에 응답을 받을 수 없을 때 주어집니다.



이외에도 많은 코드들이 있지만 일단 여기까지만 작성하겠다. 좀 더 자세한 코드들과 설명을 보고 싶으면 아래 참조 링크를 참고해주면 되겠다.



참고

MDN 문서 https://developer.mozilla.org/ko/docs/Web/HTTP/Status#%EC%A0%95%EB%B3%B4_%EC%9D%91%EB%8B%B5

블로그 글
https://evan-moon.github.io/2020/03/15/about-http-status-code/#%EC%9E%91%EC%97%85%EC%9D%98-%EC%88%98%ED%96%89-%EC%83%81%ED%83%9C%EB%A5%BC-%EC%95%8C%EB%A0%A4%EC%A3%BC%EB%8A%94-http-%EC%83%81%ED%83%9C-%EC%BD%94%EB%93%9C
https://surprisecomputer.tistory.com/47

profile
프론트엔드 개발자입니다.

0개의 댓글