[HTTP강의] HTTP 상태코드
2022. 5. 24. 14:20ㆍ개발공부/HTTP
728x90
본 글은 인프런 김영한님 강의를 정리한 글입니다. 자세한 강의내용은 강의를 통해 들어보시길 추천드립니다.
HTTP 응답 시 메시지 첫 줄(start-line)에 HTTP 상태코드
가 전달됩니다.
1xx
: 처리 중인 상태(잘 사용되지 않음)2xx
: 정상 처리된 상태3xx
: 리다이렉션이 필요한 상태(요청이 완료되려면 리다이렉팅 같은 추가 액션이 필요함)4xx
: 클라이언트 오류인 상태(잘못된 문법/요청 등으로 작업 진행 불가)5xx
: 서버 오류인 상태(서버가 정상적으로 요청을 처리하지 못함)
HTTP 상태코드별 특징
1) 1xx
거의 사용하지 않는 상태코드로 생략합니다.
2) 2xx
201
: 요청을 처리하고 created(생성) 됐다는 표시입니다. 헤더에 Location(URI)을 담아서 응답합니다.202
: 요청이 접수됐지만 처리되진 않은 상태입니다. 잘 사용되진 않지만 1시간 뒤 배치로 처리될 경우 사용할 수 있습니다.204
:No Content
요청을 수행했지만 응답 페이로드(메시지 바디)에 보낼 데이터가 없다는 상태입니다.
3) 3xx
요청을 완료하기 위해 리다이렉트가 필요하다는 상태코드입니다. 응답에 리다이렉트 Location을 포함해 해당 URI로 재요청해서 정상적인 통신이 완료됩니다. 종류는 영구 리다이렉트
, 일시 리다이렉트
, 특수 리다이렉트(캐시)
이 있습니다.
영구 리다이렉트
리소스의 URI가 영구적으로 변경됩니다. 원래의 URI를 더이상 사용하지 않는 경우입니다. 검색 엔진 등에서도 이를 인지합니다.
301
: POST 메서드에서 GET으로 변경이 가능하고, 본문이 제거될 수 있습니다.308
: 메서드의 변경이 불가능하고, 본문이 유지됩니다.
일시적 리다이렉트
브라우저에서 대부분 GET으로 변경해 리다이렉트 Location을 전달해주지만, 실무에선 302
를 많이 사용합니다.
302
:301
과 유사합니다. 메서드 변경이 가능하고, 본문이 제거될 수 있습니다.307
:308
과 유사합니다. 메서드 변경이 불가합니다.303
: 편의상 리다이렉트 메서드가 GET으로 변경됩니다.
PRG(POST/REDIRECT/GET)
안정된 리다이렉트 처리방식입니다. POST 메서드로 요청할 때 리다이렉트는 GET으로 전달하는 방식은 만약 결제요청이 POST로 처리되었을 때, GET 메서드로 리다이렉트 해줌으로써 중복 결제가 되지 않도록 처리할 수 있습니다.
특수 리다이렉트(캐시)
304
:Not Modified
캐시를 목적으로 사용하는 상태코드입니다. 클라이언트에서 캐시에 대한 유효함을 확인하고 싶을 때, 응답으로304
를 전달하면 해당 캐시를 사용해도 된다는 의미입니다. 메시지 용량이 줄어들고, 캐시를 사용해야되니 메시지 바디엔 빈 값을 보내야 합니다. 조건부 GET HEAD 요청 시 사용합니다. 자세한 내용은 뒤에 캐시와 함께 다룰 예정입니다.
4) 4xx
가장 흔히 볼 수 있는 클라이언트 오류 상태코드입니다. 같은 요청을 재시도해도 동일한 오류 상태코드가 전달됩니다.
400
:Bad Request
요청이 잘못돼 서버거 요청을 처리할 수 없을 때입니다. 요청 파라미터나 API 스펙이 틀렸을 때 반환되는 상태코드입니다.401
:UnAuthorized
인증(Authentication)/인가(Authorization)에 문제가 있다는 상태코드입니다. 응답에 WWW-Authentication 헤더와 인증방법을 설명해주면 좋습니다.403
:Forbidden
인증 자격은 있지만 접근 권한이 없을 때의 상태코드입니다.404
:Not Found
리소스가 없다는 상태코드입니다. 접근 권한이 부족한 리소스에 접근할 때도404
상태코드가 반환될 수 있습니다.
5) 5xx
500
:Internal Server Error
내부 서버에 문제가 있을 때 반환되는 상태코드입니다.503
:Service Unavailable
서버에 문제가 있어 일정시간동안 사용이 불가능함을 알려주는 상태코드입니다. 헤더의 Retry-After로 얼마뒤에 사용이 가능한지 전달해줍니다.
참조: 인프런 김영한님 HTTP 강의
'개발공부 > HTTP' 카테고리의 다른 글
[HTTP강의] HTTP 캐시 (0) | 2022.05.26 |
---|---|
[HTTP강의] HTTP 헤더 (0) | 2022.05.25 |
[HTTP강의] HTTP 메서드 (0) | 2022.05.23 |
[HTTP강의] HTTP 특징 (0) | 2022.05.23 |
[HTTP강의] TCP/UDP와 URI (0) | 2022.04.21 |