프로젝트

[ 웹/WEB ] HTTP 응답 상태 코드

Seunghyun_KO 2024. 9. 8. 18:17
728x90
반응형

HTTP란?

HyperText Transfer Protocol의 약자로, 서버와 클라이언트 사이에 데이터를 어떻게 주고받을지 미리 정해놓은 규칙(프로토콜, protocol)이다.

 

클라이언트(웹 브라우저 등)는 사전에 정의된 HTTP에 따라 서버에게 요청을 보내고 서버는 마찬가지로 HTTP에 따라 클라이언트의 요청에 대한 응답을 보낸다. 이때, 서버가 보내는 응답 메시지에는 상태 코드(Status Code)를 포함하는데 이는 100~500번대까지 세자리 숫자로 백의 자릿수에 따라 총 5개의 클래스(분류)로 구분되고, 이는 RFC 9110에 정의되어 있으며 '인터넷 할당 번호 관리기관' IANA(Internet Assigned Numbers Authority)에서 관리가 이루어지고 있다.


1XX: 정보 제공(Informatinoal)

  | 요청을 받았으며 프로세스를 계속한다.

2XX: 성공(Success)

  | 요청을 성공적으로 받았으며 정상적으로 요청이 수행되었다.

3XX: 리다이렉션(Redirection)

  | 요청을 완료하기 위해 추가적인 작업이 필요하다.

4XX: 클라이언트 에러(Client Error)

  | 클라이언트가 보낸 요청의 문법이 잘못되었거나 요청을 처리할 수 없다.

5XX: 서버 에러(Server Error)

  | 서버에 대한 문제로 클라이언트의 요청을 처리할 수 없다.


1XX -  Information responses

: 클라이언트의 요청을 받고 요청 받은 작업을 계속 진행한다

상태 코드 의미 상세 설명
100 Continue 계속 클라이언트는 요청 헤더에 'Expect: 100-continue'를 보내고 서버는 이를 처리할 수 있으면 같은 100 코드로 응답
101 Switching Protocols 프로토콜 전환 프로토콜을 HTTP 1.1에서 업그레이드 할 때 Upgrade 응답 헤더에 표시 (현재 HTTP 1.1이 최신이므로 사용 안됨)
102 Processing 처리중 서버가 처리하는데 오랜 시간이 예상되어 클라이언트에서 타임 아웃이 발생하지 않도록 이 응답 코드를 보냄

 

2XX - Successful responses 

: 클라이언트의 요청을 성공적으로 처리하였다

상태 코드 의미 상세 설명
200 OK 성공 서버가 요청을 성공적으로 처리함
201 Created 생성됨 요청이 처리되어 새로운 리소스가 생성됨. 응답 헤더 Location에 새로운 리소스의 절대 URI를 기록함
202 Accepted 허용됨 요청은 접수하였지만, 처리가 완료되지 않음. 응답 헤더의 Location, Retry-After를 참고하여 클라이언트는 다시 요청을 보냄.
203 Non-Authoritative Information 신뢰할 수 없는 정보 응답 헤더가 오리지널 서버로부터 제공된 것이 아닌 경우. 프록시 서버가 응답 헤더에 주석을 덧붙인 경우.
204 No Content 콘텐츠 없음 처리에 성공하였지만, 클라이언트에게 돌려줄 콘텐츠가 없다. 응답에는 헤더만 있고 바디가 없음.
205 Reset Content 콘텐츠 재설정 요청 처리 성공, 브라우저 화면을 리셋함
206 Partial Content 일부 콘텐츠 콘텐츠의 일부만 보냄.
207 Multi-Status 다중 상태 처리 결과의 상태가 여러개. 대게 성공을 의미하지만 각각의 요청에 대한 처리 결과가 성공인지 바디를 통해 확인

 

3XX - Redirection messages

: 클라이언트는 요청을 마치기 위해 추가 동작을 수행해야 한다

상태 코드 의미 상세 설명
300 Multiple Choices 여러 선택항목 지정한 URI에 대해서 콘텐츠 협상을 수행한 결과 서버에서 콘텐츠를 결정하지 못하고 클라이언트에게 복수 개의 링크를 응답
301 Moved Permanently 영구 이동 지정한 리소스가 새로운 URI로 이동하여 이동할 곳의 새로운 URI를 응답 헤더 Location에 기록
302 Found 다른 위치 찾음 요청한 URI가 없으므로 클라이언트 메소드를 그대로 유지한 채 응답 헤더 Location에 표시된 다른 URI로 요청을 재송신 해야 함 (302의 의미를 정확하게 개선해서 307을 정의하였으므로 302 사용은 권장하지 않음)
303 See Other 다른 위치 보기 응답 헤더의 Location에 표시된 URI에서 GET 요청을 통해 요청에 대한 처리 결과를 얻을 수 있음
304 Not Modified 수정되지 않음 If-Modified-Since와 같은 조건부 GET 요청일때 지정한 리소스가 갱신되지 않았음을 의미 (이 응답은 바디문이 없음)
305 Use Proxy 프록시 사용 지정한 리소스에 액세스 하기 위해 응답 헤더 Location에 기록된 프록시의 URI를 통해야 함
307 Temporary Redirect 임시 리다이렉션 요청한 URI가 없으므로 클라이언트 메소드를 그대로 유지한 채 응답 헤더 Location에 표시된 다른 URI로 요청을 재송신 요청. 클라이언트는 향후 요청 시 원래 위치를 계속 사용해야 함 (302의 의미를 정확하게 재정의한 것)

 

4XX - Client error responses

: 클라이언트 요청에 오류가 있다

상태 코드 의미 상세 설명
400 Bad Request 잘못된 요청 클라이언트 요청의 구문이 잘못됨
401 Unauthorized 권한 없음 지정한 리소스에 대한 액세스 권한 없음
402 Payment Required 결제 필요 지정한 리소스를 액세스 하기 위해 결제가 필요
403 Forbidden 금지됨 지정한 리소스에 대한 액세스가 금지됨(401 이외의 사유)
404 Not Found 찾을 수 없음 지정한 리소스를 찾을 수 없음
405 Method Not Allowed 허용되지 않은 메소드 요청한 URI가 지정한 메소드를 지원하지 않아 응답 헤더 Allow에 이 URI가 지원하는 메서드 목록을 기록함
406 Not Acceptable 수용할 수 없음 클라이언트가 Accept-* 헤어데 지정한 항목에 관해 처리할 수 없어 서버가 수용 가능한 다른 선택지 리스트를 기록
407 Proxy Authentication Required 프록시 인증 필요 클라이언트는 프록시 서버의 응답 헤더 Proxy-Authenticate에 필요한 인증 방식으로 인증이 필요
408 Request Timeout 요청 시간초과 요청을 기다리다 서버에서 타임아웃됨
409 Conflict 충돌 서버가 요청을 수행하는 중 충돌이 발생
410 Gone 사라짐 지정한 리소스가 이전에는 존재하였지만, 현재 존재하지 않음
411 Length Required 길이 필요 요청 헤더에 Content-Length를 지정해야 함
412 Precondition Failed 사전 조건 실패 If-Match와 같은 조건부 요청에서 지정한 사전 조건이 서버와 맞지 않음
413 Request Entity Too Large 너무 큰 요청 객체 요청 메세지가 너무 커 서버에서 접속을 끊음
414 Request-URI Too Large 너무 긴 요청 URI 요청 URI가 너무 긺
415 Unsupported Media Type 지원되지 않는 미디어 타입 클라이언트가 지정한 미디어 타입을 서버가 지원하지 않아서 발생
416 Range Not Satisfiable 처리할 수 없는 요청 범위 클라이언트가 지정한 리소스의 범위가 서버의 리소스 사이즈와 맞지 않음
417 Expectation Failed 예상 실패 클라이언트가 지정한 Expect 헤더를 서버가 이해할 수 없음
422 Unprocessable Entity 처리할 수 없는 엔티티 클라이언트가 송신한 XML 구문은 맞지만, 의미상 오류가 있음
423 Locked 잠김 지정한 리소스는 잠겨있음
424 Failed Dependency 의존 관계로 실패 다른 작업의 실패로 본 요청이 실패됨
426 Upgraded Required 업그레이드 필요 응답 Upgrade 헤더 적힌 프로토콜로 클라이언트의 프로토콜 업그레이드 필요
428 Precondition Required 사전 조건 필요 If-Match와 같은 사전 조건을 지정하는 헤더가 필요하거나, If-Match 헤더가 맞지 않음
429 Too Many Requests 너무 많은 요청 클라이언트가 주어진 시간 동안 너무 많은 요청을 보내 응답 Retry-After 헤더에 다음 요청까지 기다릴 시간을 보내 요청의 속도를 제한함.
431 Request Header Fields Too Large 너무 큰 헤더 헤더의 전체 길이 또는 하나의 헤더가 너무 긴 경우
444 Connection Closed Without Response 응답 없이 연결 닫음 악의적인 요청에 대해 응답을 보내지 않고 연결을 종료함
451 Unavailable For Legal Reasons 법적 사유로 불가 법적으로 문제가 있는 리소스를 요청한 경우

 

5XX - Server error responses

: 클라이언트의 요청은 유효하나, 서버가 처리에 실패하였다

상태 코드 의미 상세 설명
500 Internal Server Error 내부 서버 오류 서버에 에러가 발생함
501 Not Implemented 구현되지 않음 요청한 URI의 메소드에 대해 서버가 구현되지 않음
502 Bad GateWay 불량 게이트웨이 게이트웨이 또는 프록시 역할을 하는 서버가 그 뒷단의 서버로부터 잘못된 응답을 받은 경우
503 Service Unabailable 서비스 제공 불가 현재 서버에서 서비스를 제공할 수 없는 경우
504 Gateway Timeout 게이트웨이 시간 초과 게이트웨이 또는 프록시 역할을 하는 서버가 그 뒷단의 서버로부터 응답을 기다리다 타임아웃이 발생한 경우
505 HTTP Version Not Supported HTTP 버전 미지원 클라이언트가 용청에 사용한 HTTP 버전을 서버가 지원하지 않음
507 Insufficient Storage 용량 부족 서버에 저장 공간 부족으로 요청을 처리하지 못함

 

728x90
반응형