기술보안/WEB

[WEB] HTTP 상태 코드

kimcogi 2024. 1. 28. 00:10

HTTP response Status Code에 대한 정보이다

 

참고 자료

* IETF RFC 2616

* Mozilla HTTP response status code    

* W3 RFC 2616  Hypertext Transfer Protocol status code Definitions

 

HTTP 상태 코드는 3자리 숫자로 만들어져 있으며, 총 100~500번대 까지 존재한다
각 상태코드의 첫 번째 자리가 최상위 코드로 지칭되어 그룹이 나뉘어져 있기 때문에 첫 번째 자리 코드를 보고 어떤 상태인지 간단하게라도 추측이 가능하다

 

각 상태 코드의 의미는 하나하나 정해져 있지만, 서버와 클라이언트가 선택한 약속에 의해서 다르게 적용될 수 있으므로 그 점을 유의하고 살펴보자

 

  • 1xx(정보) : 요청을 받았으며 프로세스가 계속 진행되는 상태
  • 2xx(성공) : 요청을 성공적으로 받았으며 정상적으로 수용된 상태
  • 3xx(리다이렉션) : 요청 완료를 위해 추가 작업 조치가 필요한 상태
  • 4xx(클라이언트 오류) : 요청을 처리할 수 없거나 문법이 잘못된 상태
  • 5xx(서버 오류) : 서버에서 오류가 발생된 상태, 서버가 정상 요청을 처리하지 못하는 상태

 

1xx 번대 (Informational responses)

1xx 번대의 상태 코드들은 요청이 수신되어 처리 중 이라는 의미를 가지며 현업에서는 실제로 자주 쓰이지 않는 상태코드이다

Status Code Status Message explanation
100 Continue 클라이언트가 요청을 계속해야 하거나 요청이 이미 완료된 상태
101 Switching Protocols 클라이언트의 요청 헤더에 대한 응답이 전송되어 서버가 전환하는
프로토콜 표시
102 Processing 서버가 요청을 수신해서 처리 중이나 응답이 없는 상태
103 Early Hints 서버가 응답을 준비하는 동안 리소스를 미리 읽을 수 있도록 하는 상태
주로 Link 헤더와 함께 사용됨

 

2xx 번대 (Successful responses)

2xx 번대의 상태 코드들은 요청이 정상적으로 처리되었다는 의미를 가지며, 단순하게 보자면 요청에 대한 성공을 나타내고 있으나, 클라이언트가 행동한 어떠한 행위에 대한 성공인지를 나타내주는 것이기 때문에 가장 중요하고 자주 볼 수 있는 상태 코드이다

Status Code Status Message explanation
200 Ok 요청이 성공된 상태로, HTTP 메서드에 따라 요청이 성공된 결과의 의미가 다름
* GET : 리소스를 가져온 후 메시지 본문에 전송이 완료된 상태
* HEAD : 헤더가 메시지 본문 없이 응답에 포함된 상태
* PUT or POST : 작업 결과에 대한 설명하는 리소스가 메시지 본문에 전송된 상태
* TRACE : 메시지 본문에 서버에서 수신한 요청 메시지가 포함된 상태
201 Created 요청이 성공된 상태로, 새 리소스가 생성된 상태
202 Accepted 요청이 수신되었으나 아직 실행되지 않은 상태 (서버가 아직 처리를 완료하지 못하는 상태)
* 보통적으로 요청값이 크고 무거워서 실행되는데 시간이 오래걸릴 경우에 발생
203 Non-Authoritative
Information
메타데이터가 원본 서버에서 사용할 수 있으며, 로컬 또는 타사 복사본에서 수집이 된 상태
웹사이트가 프록시 서버(VPN, CDN 등)를 사용할 때 주로 반환됨
204 No Content 요청이 정상적으로 수신되었으나 반환할 수 있는 컨텐츠가 없는 경우
205 Reset Content 브라우저 새로고침이 필요
206 Partial Content 리소스 범위의 일부분만 반환된 상태
207 Multi-Status 응답값의 바디가 여러개가 혼합되어 응답된 상태
* 주로 WebDAV에 사용됨
208 Already Reported 이미 앞에서 열거된 상태
* 주로 WebDAV에 사용됨
218 This is fine 오류가 발생되었으나 서버는 정상적임을 나타내는 상태
* 주로 Apache 웹 서버에서 사용되며 비공식 HTTP 응답 코드임
226 IM Used 서버가 GET 요청에 대한 응답 의무를 다한 상태
* 주로 HTTP Delta Enconding 기법을 이용한 상태 코드로, HTTP Delta Encoding 기법을 이용한 부분 수정 리소스만 반환한 상태

 

3xx 번대 (Redirection)

3xx 번대의 상태 코드들은 요청을 완료하기 위해서 추가적인 작업이 필요함을 의미한다
클라이언트에서 필요로하는 리소스에 대해 다른 위치를 사용하라고 알려주거나 해당 리소스의 내용 대신 다른 대안 응답을 제공하는 역할을 한다

 

3xx번대(Redirection)의 상태 코드들은 크게 3가지의 종류로 나눠진다

  • 영구 리다이렉션(Permanent) : 특정 리소스의 URL이 영구적으로 이동
  • 일시 리다이렉션(Temporary) : 특정 리소스의 URL이 일시적으로 이동
  • 특수 리다이렉션(Special) : 캐시를 활용할 것인지에 대한 여부 확인
Status Code Status Message explanation
300 Multiple Choices 요청에 대한 둘 이상의 응답이 존재
* 응답 중 하나를 선택할 수 있는 표준화된 방법은 없으나 사용자가 선택할 수 있도록 HTML 링크를 제공하는 방식이 권장됨
301 Moved Permanently 요청된 리소스의 URL이 영구적으로 변경됨
* 영구 리다이렉션(Permanent)에 해당됨
* 메서드가 GET으로 바뀜
302 Found 요청된 리소스의 URL이 일시적으로 변경되어 다른 URL을 사용해야 함
* 일시 리다이렉션(Temporary)에 해당됨
* 메서드가 GET으로 바뀜
303 See Other 서버에서 클라이언트가 GET요청을 통한 다른 URL에서 요청된 리소스를 가져오도록함
* 일시 리다이렉션(Temporary)에 해당됨
* 메서드가 GET으로 바뀜
304 Not Modified 응답이 수정되지 않았음을 클라이언트에 알려줘 캐싱 목적으로 사용됨
305 Use Proxy 리소스가 프록시를 통해서만 액세스 가능함
* 보안 문제로 더 이상 사용하지 않음
306 unused 보안 문제로 더 이상 사용하지 않음
307 Temporary
Redirect
다른 URL에서 요청된 리소스를 가져오도록 클라이언트 지시
임시로 이동됨을 의미
* 일시 리다이렉션(Temporary)에 해당됨
* 메서드는 유지됨
308 Permanent
Redirect
리소스의 위치가 다른 URL로 영구적으로 위치됨
영구 이동을 의미
* 영구 리다이렉션(Permanent)에 해당됨
* 메서드는 유지됨

 

4xx 번대 (Client Error)

4xx 번대의 상태 코드들은 클라이언트 오류를 의미하며, 잘못된 문법 또는 오류로 인해 서버가 요청을 수행할 수 없어 그 원인이 클라이언트에게 있음을 의미한다

대표적인 예로 존재하지 않은 URL 또는 잘못 구성된 요청 메세지 등이 있다

Status Code Status Message explanation
400 Bad Request 클라이언트가 잘못된 요청을 보냄
* 주로 요청 구문, 메시지 등의 문법 오류로 인한 문제가 해당됨
401 Unauthorized 클라이언트가 요청된 응답을 얻기 위해서 인증을 해야함을 의미
* 클라이언트가 인증 과정이 없을 경우 발생
402 Payment Required 향후 사용을 위한 예약된 비표준 응답 코드
403 Forbidden 클라이언트가 콘텐츠에 대한 액세스 권한이 없음
인증 자격(로그인 등)은 증명이 되었으나, 접근 권한이 불충분할 경우 발생
404 Not Found 클라이언트가 요청한 자원이 존재하지 않음
405 Method Not Allowed 허용되지 않는 메소드 사용시 발생
* 서버에서 해당 요청 메소드에 대한 기능을 제한/금지 한 경우
* API내 해당 요청 메소드 호출이 불가한 경우
406 Not Acceptable 해당되는 콘텐츠 협상에 일치하는 것이 없음
407 Proxy Authentication
Required
프록시 인증 필요
* 401 에러와 동일한 케이스 (프록시가 필요한)
408 Request Timeout 요청 시간이 너무 길어 서버가 사용되지 않는 연결을 종료
409 Conflict 요청이 서버의 현재 상태와 충돌이 발생한 경우
* 비지니스 로직상 요청이 처리 불가능한 상태일 경우
410 Gone 리소스가 영구적으로 삭제된 경우
* 404 에러와 비슷한 케이스이나 410 에러는 컨텐츠가 서버에서 영구히 삭제되어 전달해 줄 주소가 존재하지 않는 경우를 뜻함
411 Length Required 요청 메시지 내 Content-Length 헤더가 없을 경우
412 Precondition Failed 클라이언트 조건부 요청 실패
* GET, HEAD 메소드의 경우 304 에러 발생
* POST, PUT, PATCH등 메소드의 경우 412 에러 발생
413 Payload Too Large 요청 URL이 너무 길어 처리 불가 할 경우
414 URL Too Long 클라이언트가 요청한 URL이 너무 긴 경우
415 Unsupported Media Type 클라이언트가 요청한 데이터의 미디어 형식이 서버에서 지원되지 않을 경우
416 Range Not
Satisfiable
Range 요청 헤더 내 지정 범위가 만족되지 않을 경우
* Range 헤더 범위가 대상 URL의 데이터 크기를 벗어난 경우
417 Expect Expect 요청 헤더 내 요청한 예상 반환 코드 반환이 불가한 경우
418 I`m a teapot 만우절 농담 상태 코드
421 Misdirected Request 의도하지 않은 요청을 받아 서버가 응답을 생성할 수 없는 경우
422 Unprocessable
Content
요청 형식이 올바른 의도하지 않은 요청을 서버가 의미 오류로 인해 응답을 생성할 수 없는 경우
423 Locked 요청에 대한 대상 파일 또는 폴더가 잠겨 있을경우
* 주로 WebDAV에 사용됨
424 Failed Dependency 이전 요청이 실패하여 현재도 요청이 실패하였음을 의미
* 주로 WebDAV에 사용됨
426 Upgrade Required HTTP 프로토콜 업그레이드 권고
428 Precondition
Required
조건부 요청 요구
429 Too Many Requests 클라이언트가 일정 시간 동안 너무 많은 요청을 보낸 경우
431 Request Header
Fields Too Large
헤더 필드가 너무 커서 요청을 처리하지 않는 경우
451 Unavailable For
Legal Reasons
서버가 정부에서 검열하는 웹페이지와 같은 합법적으로 제공할 수 없는 리소스를 요청한 경우

 

5xx 번대 (Server Error)

5xx 번대의 상태 코드들은 서버 오류를 의미하며, 400번대와 동일하게 오류로 인한 요청 처리 과정의 실패를 의미하나 원인이 클라이언트가 아닌 서버에게 있음을 의미한다

Status Code Status Message explanation
500 Internal Server Error 서버 내부 문제 발생
* 서버 내부 문제가 발생되는 경우는 여러 종류가 존재하는데, 웹 서버에 대해 문제가 있다는 것으로 알면 좋다
501 Not Implemented 해당 요청에 대한 기능을 서버에서 지원하지 않음
502 Bad Gateway 서버가 요청을 처리하는 데 필요한 응답을 얻기 위해 게이트웨이로 작동하는 동안 잘못된 응답을 받음
* 보통의 경우 서버가 폭주하여 통신 장애가 발생한 경우 발생
503 Service Unavailable 서비스 이용 불가
504 Gateway Timeout 게이트웨이 시간 초과
* 408 에러와 비슷해보이나, 다른 서버에 요청을 보냈을 경우 응답 대기 상태에서 타임아웃이 발생한 경우를 의미함
505 HTTP Version Not
Supported
서버에서 지원되지 않은 HTTP 버전
506 Variant Also
Negotiates
서버에 내부 구성 오류가 발생한 경우
* 공식적으로 채택된 응답 코드가 아님
507 Insufficient Storage 스토리지 공간 부족
* 주로 WebDAV에 사용됨
508 Loop Detected 무한 루프 감지
* 주로 WebDAV에 사용됨
510 Not Extended 서버에 내부 구성 오류가 발생한 경우
* 공식적으로 채택된 응답 코드가 아님
511 Network Authentication Required 클라이언트가 네트워크 액세스를 얻기 위해 인증이 필요한 상태
* 대표적인 예 : 공공 와이파이 인증

 

반응형