본문 바로가기
네트워크

HTTP 웹 기본 지식 - HTTP 상태코드

by SICDev 2021. 9. 4.
반응형

HTTP 상태코드❓

  • 1xx(Informational) : 요청이 수신되어 처리중
  • 2xx(Successful) : 요청 정상 처리
  • 3xx(Redirection) : 요청을 완료하려면 추가적인 행동이 필요
  • 4xx(Client Error) : 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음.
  • 5xx(Server Error) : 서버 오류, 서버가 정상 요청을 처리하지 못함

2xx - 성공

  • 200 OK - 요청이 성공하면 응답이 성공했을때(주로 GET)
  • 201 Created - 요청이 성공해서 새로운 리소스가 생성됐을때 사용(주로 POST)
  • 202 Accepted - 요청은 접수되었으나 처리가 아직 완료되지 않았을때 사용(잘 사용하지 않음)
  • 204 No Content - 요청은 성공했지만, 응답 페이로드 본문에 보낼 데이터가 없을때 사용(응답할 데이터가 없을때)

수 많은 2xx 상태코드가 존재하지만, 대부분 200 혹은 201 까지만 사용하는 경우가 많다❗


3xx - 리다이렉션
(요청을 완료하기 위해선 클라이언트의 추가 조치가 필요)

  • 300 Multiple Choices - 거의 사용하지 않음
  • 301 Moved Permanently
  • 302 Found
  • 303 See Other
  • 304 Not Modified
  • 307 Temporary Redirect
  • 308 Permanent Redirect

 

리다이렉션❓

3xx 응답의 결과에 Location헤더가 존재하면, 그 Location의 위치로 자동 이동❗❗ ( 리다이렉트 )

  • 영구 리다이렉션 - 특정 리소스의 URI가 영구적으로 변경
    ex) /members -> /uesrs
  • 일시 리다이렉션 - 일시적으로 변경
    ex) 게시글 등록 후 게시들 상세화면으로 이동하는 것
  • 특수 리다이렉션 - 결과 대신 캐시를 사용

 

1. 영구 리다이렉션

리소스의 URI가 영구적으로 변경되었을때 사용한다❗

  • 301 Moved Permanently - 리다이렉트시 요청 메서드가 GET으로 변경되고, BODY의 데이터가 제거될 수 있음❗
  • 308 Permanent Redirect - 리다이렉트시 요청 메소드와, BODY 데이터가 모두 유지

실무에서는 308은 거의 사용하지 않는다.

URI가 변경되었다는건 내부적으로도 많은것이 변경되었다는것을 의미하기때문에 GET으로 다시 Redirct하는게 맞음❗

사실 두 개 모두 잘 사용되지 않는다...😥

 

 

2. 일시 리다이렉션

리소스의 URI가 일시적으로 변경될때 사용한다❗

  • 302 Found - 리요청 메서드가 GET으로 변경되고, BODY의 데이터가 제거될 수 있음❗
  • 307 Temporary Redirect - 리다이텍트시 요청 메서드와 BODY 데이터가 모두 유지
  • 303 See Other - 리다이렉트시 무조건 요청 메서드를 GET으로 변경❗

 

그럼 이 일시적 리다이렉션을 언제 사용할까❓❓🤔

 

PRG(POST/Redirect/Get) 패턴때 많이 사용한다❗

POST로 어떤 리소스를 새로 생성하고, 다시 새로고침을 하면 다시 요청을 반복하기 때문에😱 다시 POST 요청이 전송되고, 리소스 중복이 일어날 수 있다❗

이떄 RPG패턴을 사용해서 POST로 리소스를 생성하고, 결과 화면을 GET 메서드로 리다이렉트 시키면 해결된다❗

이때 클라이언트가 새로고침을 해도 결과화면을 다시 요청하는것이기 때문에 문제가 없다❗

 

3. 기타 리다이렉션

  • 300 Multiple Choices - 사용하지 않음
  • 304 Not Modified - 캐시를 목적으로 사용한다. 캐시로 리다이렉트한다고 이해하면 된다.❗
    클라이언트에게 캐시를 재사용하라고 알려주는것이다. 캐시를 사용하는것이기 때문에 응답에 BODY를 포함하면 안된다

4xx - 클라이언트 오류

클라이언트의 잘못된 요청으로 서버가 요청을 수행 할 수 없을때 사용한다.

온전히 클라이언트의 요청이 잘못되었기때문에 오류의 원인이 클라이언트이고, 재시도를해도 항상 실패를한다.

  • 400 Bad Request - 요청구문, 메시지 등의 오류
    ex) 요청 파라미터가 잘못되었거나, API 스펙에 맞지 않을 경우
  • 401 Unauthorized - 클라이언트가 해당 리소스에 대한 인증이 필요할때 사용한다. ( 로그인이 안됐을 때 )
    WWW-Authenticate 헤더와 함께 인증 방법을 응답 메시지에 담아서 보내줘야한다❗
  • 403 Forbidden - 서버가 요청을 이해했지만, 승인을 거부 ( 접근 권한이 없을 때 )
    ex) 일반사용자가 ADMIN페이지에 접근을 시도 했을때
  • 404 Not Found - 요청 리소스를 찾을수 없을때 사용한다. ( 서버에 요청 리소스가 존재하지 않을 떄 )

5xx - 서버 오류

 

  • 500 Internal Server Error - 서버 내부 문제로 오류가 발생햇을 때 ( 애매하면 다 500 오류 )
  • 503 Service Unavailable - 서비스 이용 불가 ( 서버의 일시적 과부화, 예정된 작업으로 잠시 중단 됐을 때 )

 

 

 

출처

https://www.inflearn.com/course/http-%EC%9B%B9-%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC

 

모든 개발자를 위한 HTTP 웹 기본 지식 - 인프런 | 강의

실무에 꼭 필요한 HTTP 핵심 기능과 올바른 HTTP API 설계 방법을 학습합니다., 웹 기술을 사용하는 개발자라면 누구나 OK!꼭 필요한 HTTP의 핵심을 알려드립니다. 📣 확인해주세요!본 강의는 자바 스

www.inflearn.com

 

반응형