본문 바로가기
개인공부/Http Network Basic

4장 - 결과를 전달하는 HTTP 상태 코드

by 하고싶은건많은놈 2023. 2. 27.

4.1 상태 코드는 서버로부터 리퀘스트 결과를 전달한다

HTTP 상태 코드 : 클라이언트가 서버를 향해 보낸 리퀘스트에 대한 결과를 알리는 역할

3자리 숫자 + 설명으로 구성

  • 1xx : Informational - 리퀘스트를 받아들여 처리중
  • 2xx : Success - 리퀘스트를 정상적으로 처리했음
  • 3xx : Redirection - 리퀘스트를 완료하기 위해 추가 동작이 필요
  • 4xx : Client Error - 서버가 리퀘스트 이해 불가능
  • 5xx : Server Error - 서버가 리퀘스트 처리 실패

클래스 정의를 지킬시 RFC에서 정의된 상태 코드를 변경하거나 독자의 상태 코드를 만들어도 무관함

상태 코드의 종류는 수십가지이나 실제로 자주 사용되는 것은 14종류

단, 상태 코드의 대부분은 유저가 다른 내용을 알기 어렵게 되어있어 상태 코드가 현재 상황과 불일치할 수 있음

즉, 웹 애플리케이션에서 에러가 발생한 경우에도 상태 코드로는 200 OK가 되돌아오는 경우가 존재


4.2 2xx 성공(Success)

2xx 리스폰스는 리퀘스트가 정상적으로 처리되었음을 의미

이 때 상태 코드와 함께 되돌아오는 정보는 메소드에 따라 다름

  • 204 No Content
    서버가 리퀘스트를 받아 처리하는데는 성공했지만 리스폰스에 엔티티 바디를 포함하지 않음
    즉, 클라이언트에서 서버에 보내는 정보는 받아들이지만 클라이언트에 대해 새로운 정보를 보낼 필요가 없는 경우 사용
  • 206 Partial Content
    Range에 의해 범위가 지정된 리퀘스트에 의해 서버가 부분적 GET 리퀘스트를 받았음을 의미
    리스폰스에 Content-Range로 지정된 범위의 엔티티가 포함됨

4.3 3xx 리다이렉트(Redirection)

3xx 리스폰스는 리퀘스트가 정상적으로 처리되기 위해 클라이언트 측에서 특별한 처리를 수행해야함을 의미

 

  • 301 Moved Permanently
    리퀘스트된 리소스에 새로운 URI가 부여되어있어 이후로는 해당 URI를 사용해야함을 의미
    디렉토리 지정시 마지막에 '/'를 붙이는 것을 잊은 경우 등에 발생
  • 302 Found
    리퀘스트된 리소스에 새로운 URI가 할당되어있어 해당 URI를 사용해야함을 의미
    301과 비슷하지만 이 경우 URI의 이동은 일시적임
  • 303 See Other
    리퀘스트에 대한 리소스가 다른 URI에 있어 GET 메소드를 사용하여 얻어야함을 의미
    302 Found와 같은 기능이지만 리다이렉트 장소를 GET으로 얻어야한다고 명확하게 지정하는 것이 차이점
    ex) POST 메소드로 엑세스한 CGI 프로그램을 실행한 후 처리결과를 별도의 URI에 GET 메소드로 리다이렉트 시키고 싶은 경우
  • 304 Not Modified
    클라이언트가 조건부 리퀘스트를 했을 때 리소스에 대한 엑세스는 허락하나 조건이 충족되지 않았음을 의미
    따라서 리스폰스 바디에 어떠한 것도 포함되어있어서는 안됨
  • 307 Temporary Redirect
    302 Found와 같은 의미를 지니지만 구현상 POST로부터 GET으로 치환되는 302와 달리 307은 브라우저 사양에 따라 치환을 하지 않음

301, 302, 303 리스폰스 코드가 반환되면 대부분의 브라우저에서는 POST를 GET으로 바꾸어 리퀘스트의 엔티티 바디를 삭제하고 리퀘스트를 자동적으로 재송신함


4.4 4xx 클라이언트 에러(Client Error)

4xx 리스폰스는 클라이언트에 의해 에러가 발생했음을 의미

  • 400 Bad Request
    리퀘스트 구문이 잘못되었음을 의미, 따라서 리퀘스트 내용을 재검토 후 재송신해야함
    브라우저는 이것을 200 OK와 같이 취급함
  • 401 Unauthorized
    송신한 리퀘스트에 HTTP 인증(BASIC 인증, DIGEST 인증) 정보가 필요함을 의미
    이미 리퀘스트가 한번 이루어진 경우에는 유저 인증에 실패했음을 의미
    401을 포함한 리스폰스 반환시엔 리퀘스트된 리소스에 적용되는 challenge를 포함한 WWW-Authenticate 헤더 필드를 포함해야함
    브라우저에서 처음 401 리스폰스를 받은 경우에는 인증을 위한 다이얼로그가 표시됨
  • 403 Forbidden
    리퀘스트된 리소스의 엑세스가 거부되었음을 의미
    이유를 명확히 할 경우 거부된 원인은 엔티티 바디에 기재하여 유저 측에 표시함
    주 원인으로는 파일 시스템의 권한이 부여되지 않은 경우 및 엑세스 권한에 문제가 있는 경우가 있음
  • 404 Not Found
    리퀘스트한 리소스가 서버상에 없음을 의미
    또는 리퀘스트를 거부하는 이유를 분명히 하고싶지 않은 경우에도 사용

4.5 5xx 서버 에러(Server Error)

5xx 리스폰스는 서버에 의해 에러가 발생했음을 의미

  • 500 Internal Server Error
    서버에서 리퀘스트를 처리하는 도중에 에러가 발생하였음을 의미
    웹 애플리케이션에 에러가 발생했거나, 일시적인 경우도 존재
  • 503 Service Unavaliable
    서버가 일시적으로 과부하 상태이거나 점검중이기 때문에 리퀘스트를 처리할 수 없음을 의미
    해결에 시간이 걸리는 경우 Retry-After 헤더 필드에 따라 클라이언트에 전달하는 것이 바람직함

댓글