HTTP 상태 코드

이호인·2022년 2월 15일
0

HTTP 공부

목록 보기
1/4
post-thumbnail

📌 HTTP STATUS CODE (HTTP 응답 코드)

  • HTTP 응답 코드는 5개의 클래스로 구분된다.
  • 상태 코드의 첫 번째 숫자는 응답의 클래스를 정의한다.
  • 마지막 두 자리는 클래스나 분류 역할을 하지 않는다.
1XX (정보) : 요청을 받았으며 프로세스를 계속한다.
2XX (성공) : 요청을 성공적으로 받았으며 인식했고 수용하였다.
3XX (리다이렉션) : 요청 완료를 위해 추가 작업 조치가 필요하다.
4XX (클라이언트 오류) : 요청의 문법이 잘못되었거나 요청을 처리할 수 없다.
5XX (서버 오류) : 서버가 명백히 유효한 요청에 대해 충족을 실패했다.

✔ 1XX : Information responses

  • 상태 코드가 '1'로 시작되는 경우는 서버가 요청을 받았으며, 서버에 연결된 클라이언트는 작업을 계속 진행하라는 의미. 해당 코드는 HTTP 1.0에서 지원되지 않는다.

✔ 2XX : Successful responses

  • 요청 성공, 인식, 수용!
# 2xx 응답코드

	✅ 200 OK
    
    	요청이 성공적으로 되었다.
        
    ✅ 201 Created
    
    	요청이 성공적이었으며 그 결과로 새로운 리소스가 생성되었다. 
        
        이 응답은 일반적으로 POST 요청 또는 일부 PUT 요청 이후에 따라온다.
        
    ✅ 202 Accepted
    
    	요청을 수신하였지만, 그에 응하여 행동할 수 없다.
        
        다른 프로세스에서 처리 또는 서버가 요청을 다루고 있거나
        배치 프로세스를 하고 있는 경우를 위해 만들어졌다.
        
        ex) 요청 접수 1시간 뒤에 배치 프로세스가 요청을 처리함
        
    ✅ 204 No Content
    
    	서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없다.
        (요청에 대해서 보내줄 수 있는 컨텐츠는 없지만, 헤더는 의미있을 수 있음)
        
        ex) 웹 문서 편집기 save 버튼
        
        -> save 버튼 결과로 아무 내용이 없어도 된다. 
           save 버튼을 눌러도 같은 화면을 유지해야 한다.
        
        결과 내용이 없어도 204 메세지(2xx)만으로 성공을 인식할 수 있다.

✔ 3XX : Redirection messages

  • 요청을 완료하기 위해 유저 에이전트(웹 브라우저)의 추가 조치 필요!
# 3xx 응답코드

	[영구 리다이렉션]
    
	✅ 301 Moved Permanently
    	
        이 응답 코드는 요청한 리소스의 URI가 변경되었음을 의미한다.
        
        리다이렉트시 요청 메소드가 GET으로 변하고, 본문이 제거될 수 있다. (MAY)
        
        ex) 클라이언트가 post로 정보를 입력했어도, 
        	변경된 주소로 리다이렉트 되면서 본문 내용이 사라지면
            클라이언트는 다시 입력해서 보내야할 수 있다.
            
   	✅ 308 Permanent Redirect
    
    	301 코드와 동일한 기능, 의미를 가지고 있다.
        
        차이점은 리다이렉트시 요청 메서드와 본문을 유지한다는 점이 다르다.
       
       ex) 처음에 POST로 보냈다면 리다이렉트도 POST로 보낸다.
    
    [일시적인 리다이렉션]
    
    ✅ 공통 내용 (302,303,307)
    	
        리소스의 URI가 일시적으로 변경되었음을 의미한다.
       
       새롭게 변경된 URI는 나중에 만들어질 수 있으므로 
       클라이언트는 향후의 요청도 반드시 동일한 URI로 해야한다.
       
       겜색 엔진 등에서 URI를 변경하면 안된다.
    
    ✅ 302 Found
    
    	리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음(MAY)
        -> 명확하지 않다.
        
    ✅ 303 See Other
    	
        302와 기능은 같다.
        
        클라이언트가 요청한 리소스를 다른 URI에서 GET 요청을 통해 얻어야 할 때, 
        서버가 클라이언트로 직접 보내는 응답.
        
        리다이렉트시 요청 메서드가 GET으로 변경 (GET으로 명확하게)
        
    ✅ 307 Temporary Redirect
    
    	302와 기능은 같다.
        
        리다이렉트시 요청 메서드와 본문 유지(요청 메서드를 변경하면 안된다/ MUST NOT)
    	
	[기타 리다이렉션]
    
    ✅ 304 Not Modified
    
    	이것은 캐시를 목적으로 사용된다.
        
        이것은 클라이언트에게 응답이 수정되지 않았음을 알려주며,
        그러므로 클라이언트는 계속해서 응답의 캐시된 버전을 사용할 수 있습니다.
        (캐시로 리다이렉트)
        
        304 응답은 로컬 캐시를 사용해야하므로 메시지 바디를 포함하면 안된다.
        
        조건부 GET, HEAD 요청시 사용
    
        
    
    	

✔ 4XX : Client error responses

  • 오류의 원인이 클라이언트에 있음. 클라이언트가 이미 잘못된 요청, 데이터를 보내고 있기 때문에 똑같은 재시도가 실패한다.
# 4xx 응답코드

	✅ 400 Bad Request
    	
        이 응답은 잘못된 문법으로 인하여 서버가 요청하여 이해할 수 없음을 의미한다.
        
        클라이언트는 요청 내용을 다시 검토하고 보내야한다.
        
        ex) 요청 구문, 메세지 등등 오류/ 요청 파라미터가 잘못되거나,
        API 스펙이 맞지 않을 때
        
    ✅ 401 Unauthorized 
    	
        비록 HTTP 표준에서는 '미승인(unauthorized)'이지만 
        의미상 '비인증(unauthenticated)'를 의미한다.
        
        401 오류 발생 시 응답에 WWW-Authenticate 헤더와 함께 인증 방법을 설명
        
        cf) 
        	인증(Authentication) 본인이 누구인지 (로그인) 
            인가(Authorization) 권한부여 (ADMIN 권한)
            
    ✅ 403 Forbidden
    	
        서버가 요청을 이해했지만 승인을 거부, 클라이언트는 컨텐츠에 접근한 권리를
        가지고 있지 않다.
        
        주로 인증 자격 증명은 있지만, 접근 권한이 불충분한 경우 403 에러가 발생한다.
        
        401 에러와 다른 점 : 서버에서 클라이언트가 누구인지 알고 있다.
        
    ✅ 404 Not Found
    	
        요청 리소스가 서버에 없을 때, 브라우저에서는 알려지지 않은 URL을 의미한다.
        
        또는 인증받지 않은 클라이언트로(권한이 부족한)부터 리소스를 숨기기 위하여
        이 응답을 403 에러 대신에 전송할 수도 있다.
        
        웹에서 반복적으로 발생하기 때문에 대표적인 에러
            

✔ 5XX : Server error reponses

  • 서버 문제로 오류 발생. 서버에 문제가 있기 때문에 재시도 하면 성공할 수도 있다.
    ex) 복구 등 여러가지 이유로
# 5xx 응답코드

	✅ 500 Internal Server Error
    	
        웹 사이트 서버에 문제가 있음을 의미하지만 서버는 정확한 문제에 대해
        구체적으로 설명할 수 없다.
        
        애매하면 500 오류
        
    ✅ 503 Service Unavailable
    	
        서버가 요청을 처리할 준비가 되지 않았다. 
        (ex. 유지보수를 위해 작동이 중단되거나 과부하가 걸린 서버)
        
        Retry-After:HTTP 헤더 필드로 서비스를 복구하기 전 예상시간을 보낼 수 있다.
     

reference!

1. 인프런 - HTTP 웹 기본지식 강의 (김영한)
2. 위키백과 - http 응답코드
3. HTTP 상태 코드정리 (와탭 블로그)

profile
공부 기록

0개의 댓글