[HTTP] HTTP 상태코드

전재준·2022년 2월 13일

HTTP

목록 보기
4/5

상태코드(HttpStatus)

  • 1xx (Informational): 요청이 수신되어 처리중

    • 거의 사용하지 않음.
  • 2xx (Successful): 요청 정상 처리

  • 3xx (Redirection): 요청을 완료하려면 추가 행동이 필요

    • 웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동
  • 4xx (Client Error): 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음

  • 5xx (Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함

2xx (Successful)

  • 200 요청성공

    • OK(200, HttpStatus.Series.SUCCESSFUL, "OK")
  • 201 요청 성공해서 새로운 리소스가 생성됨

    • CREATED(201, HttpStatus.Series.SUCCESSFUL, "Created")
    • 생성된 리소스는 응답의 Location(member/100) 헤더 필드로 식별
  • 202 요청이 접수되었지만 처리가 완료되지 않음.

    • ACCEPTED(202, HttpStatus.Series.SUCCESSFUL, "Accepted")
    • 배치 프로세스 같은 경우에 사용 (추후에 완료)
  • 204 요청을 성공적으로 수행했지만, 응답 본문에 보낼 데이터가 없음

    • NO_CONTENT(204, HttpStatus.Series.SUCCESSFUL, "No Content")
    • 결과 내용이 없어도 204메시지만으로 성공했음을 확인할 수 있다.

3xx (Redirection)

  • 304 캐시를 목적으로 사용

    • NOT_MODIFIED(304, HttpStatus.Series.REDIRECTION, "Not Modified")
    • 클라이언트에게 리소스가 수정되지 않았음을 알려준다. 따라서 클라이언트는 로컬PC에 저장된 캐시를 재사용한다. (캐시로 리다이렉트 한다.)
    • 304 응답은 응답에 메시지 바디를 포함하면 안된다. (로컬 캐시를 사용해야 하므로)
    • 조건부 GET, HEAD 요청시 사용
영구적인 리다이렉션
  • 301 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음(MAY)

    • MOVED_PERMANENTLY(301, HttpStatus.Series.REDIRECTION, "Moved Permanently")
  • 308 리다이렉트시 요청 메서드와 본문 유지(처음 POST를 보내면 리다이렉트도 POST 유지)

    • PERMANENT_REDIRECT(308, HttpStatus.Series.REDIRECTION, "Permanent Redirect")
일시적인 리다이렉션
  • 302 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음(MAY)

    • FOUND(302, HttpStatus.Series.REDIRECTION, "Found")
  • 307 리다이렉트시 요청 메서드와 본문 유지(요청 메서드를 변경하면 안된다. MUST NOT)

    • TEMPORARY_REDIRECT(307, HttpStatus.Series.REDIRECTION, "Temporary Redirect")
  • 303 리다이렉트시 요청 메서드가 GET으로 변경

    • SEE_OTHER(303, HttpStatus.Series.REDIRECTION, "See Other")

PRG패턴 Post/Redirect/Get

  • 페이지에서 Post 요청 후 실수로 새로고침을 눌러 Post 요청을 한번 더 요청하는 현상을 막기위해 클라이언트단에서 사용하는 방식

4xx (Client Error)

  • 400 클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할 수 없음

    • BAD_REQUEST(400, HttpStatus.Series.CLIENT_ERROR, "Bad Request")
    • 요청 파라미터가 잘못되거나, API 스펙이 맞지 않을 때
  • 401 클라이언트가 해당 리소스에 대한 인증이 필요함

    • UNAUTHORIZED(401, HttpStatus.Series.CLIENT_ERROR, "Unauthorized")
    • 인증(Authentication) 되지 않음
    • 401 오류 발생시 응답에 WWW-Authenticate 헤더와 함께 인증 방법을 설명
  • 403 서버가 요청을 이해했지만 승인을 거부함

    • FORBIDDEN(403, HttpStatus.Series.CLIENT_ERROR, "Forbidden")
    • 어드민 등급이 아닌 사용자가 로그인은 했지만, 어드민 등급의 리소스에 접근하는 경우
  • 404 요청 리소스를 찾을 수 없음

    • NOT_FOUND(404, HttpStatus.Series.CLIENT_ERROR, "Not Found")
    • 요청 리소스가 서버에 없음
    • 클라이언트가 권한이 부족한 리소스에 접근할 때 해당 리소스를 숨기고 싶을 때

5xx (Server Error)

  • 500 서버 문제로 오류 발생, 애매하면 500 오류

    • INTERNAL_SERVER_ERROR(500, HttpStatus.Series.SERVER_ERROR, "Internal Server Error")
  • 503 서비스 이용 불가

    • SERVICE_UNAVAILABLE(503, HttpStatus.Series.SERVER_ERROR, "Service Unavailable")
    • 서버가 일시적인 과부하 또는 예정된 작업으로 잠시 요청을 처리할 수 없음
    • Retry-After 헤더 필드로 얼마뒤에 복구되는지 보낼 수도 있음

0개의 댓글