인프런 강의 모든 개발자를 위한 HTTP 웹 기본 지식 수강내용 정리


HTTP 상태코드

클라이언트가 요청을 보내면 보낸 요청의 처리 상태를 서버의 응답 메세지에서 코드형식으로 알려준다.

클라이언트가 인식할 수 없는 상태코드를 반환받는다면 가장 앞자리의 코드로 해석해서 처리한다.


1XX

informational 으로 요청이 수신되어 처리중을 의미한다.

거의 사용이 되지 않는다.


2XX

successful 으로 요청이 정상으로 처리되었음을 의미한다.

  • 200 OK 정상처리완료
    주로 GET 요청이 정상적으로 처리되어 데이터를 응답해줄때 사용한다.

  • 201 Created 생성처리완료
    주로 POST 요청이 정상적으로 처리되어 서버에서 리소스를 생성했음을 응답할때 사용한다.
    헤더의 Location 필드에 생성된 리소스의 경로를 전달한다.

  • 202 Accepted
    요청이 접수되었으나 처리가 완료되지 않았음을 의미한다.
    지금 요청이 접수되었으나 일정 시간 후 배치 프로세스가 요청을 처리할 예정일 때 사용한다.

  • 204 No Content 서버에서 요청을 성공적으로 수행했지만 응답 시 BODY 에 보낼 데이터가 없을 때 사용한다.
    예를 들어 웹 문서의 편집기에서 save 버튼 클릭 시 같은 화면을 유지하고 결과 값을 반환받지 않아도 될 때 사용한다.
    BODY 가 없어도 응답코드만으로 성공을 인식할 수 있게 한다.


3XX

redirection 추가 행동이 필요해서 요청이 완료되지 않았음을 의미한다.

웹 브라우저는 3XX 응답에 Location 헤더가 있으면 해당 경로로 이동한다.

리다이렉션은 URI 가 영구적으로 이동했음을 의미하는 영구 리다이렉션, 리소스의 URI 가 일시적으로 변경되었음을 의미하는 일시 리다이렉션, 특수 리다이렉션으로 나뉜다.

  • 301 Moved Permanently [영구]
    해당 경로는 더이상 사용되지 않으므로 다른 경로로 이동해야 할 때 사용한다.
    검색 엔진 등에서도 변경이 인지된다.
    새로운 경로에서 리다이렉트 시 메서드가 GET 으로 변경되고 BODY 가 제거될 수 있다.

  • 308 Permanent Redirect [영구]
    301 과 기능은 같으나 새로운 경로에서 리다이렉트 요청 시 메서드와 BODY 를 유지한다.

  • 302 Found [일시]
    이동은 하지만 일시적으로 변경된 URI 이므로 검색엔진 등에서는 URL 을 변경하면 안될 때 사용한다.
    새로운 경로에서 리다이렉트 시 메서드가 GET 으로 변경되고 BODY 가 제거될 수 있다.

  • 307 Temporary Redirect [일시]
    302 와 기능은 같으나 리다이렉트 요청 시 메서드와 BODY 가 변경되지 않고 유지해야 할 때 사용한다.

  • 303 See Other [일시] 302 와 기능은 같으나 리다이렉트 요청 시 메서드를 GET 으로 변경해야 할 때 사용한다.

  • 304 Not Modified [특수]
    리소스가 수정되지 않아서 클라이언트에게 캐시로 리다이렉트 하기를 명령할때 사용한다.
    조건부 GET, HEAD 요청 시 사용하며, 로컬 캐시를 사용해야 하므로 응답에 BODY 를 포함하지 않는다.


4XX

클라이언트의 오류로 잘못된 문법 등으로 서버가 요청을 수행할 수 없음을 의미한다.

클라이언트의 요청이 잘못되었으므로 동일하게 재시도 시 무조건 실패한다.

  • 400 Bad Request
    요청 파라미터가 잘못되었거나 API 스펙이 맞지 않아서 클라이언트에서 요청 내용을 재검토해야 할 때 사용한다.

  • 401 Unauthorized
    클라이언트가 리소스에 대한 인증(Authentication)이 필요함을 의미한다.
    클라이언트에서는 WWW-Authenticate 헤더와 함께 인증 방법을 설명해야 한다.

    인증 Authentication : 로그인, 본인 확인
    인가 Authorization : 접근 권한
    이름이 Unauthorized 이지만 인가가 아닌 인증에 대한 오류 반환이다.

  • 403 Forbidden
    서버가 요청을 이해했지만 승인을 거부했을 때, 예를 들어 인증은 되었지만 접근 권한이 없을 때 사용된다.

  • 404 Not Found
    요청 리소스를 서버에서 찾을 수 없을 때, 클라이언트가 잘못된 경로로 요청했을 때 사용한다.
    또는 클라이언트가 권한이 부족한 리소스에 접근 시 해당 리소스 자체를 숨기고 싶을 때 사용한다.


5XX

서버 오류로 서버가 정상적으로 요청을 처리할 수 없음을 의미한다.

클라이언트의 요청은 오류가 없으므로 동일하게 재시도 시 서버의 상태에 따라 성공할 가능성이 있다.

  • 500 Internal Server Error
    서버 내부 문제로 오류가 발생했을 때 사용한다.

  • 503 Service Unavailable
    서버가 일시적인 과부하 또는 예정된 작업으로 일시적으로 요청을 처리할 수 없을 때 사용한다.
    헤더의 Retry-After 필드로 복구 예정 시간을 전달할 수 있다.