클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능
상태코드는 명세서에 나타나있는데 명세서에 나타나지 않은 상태코드들의 경우엔 각각 상위 상태코드로 해석해서 처리하게 됩니다.
서버==나
1xx의 경우는 거의 사용하지 않는다고 합니다. -> 생략
순서대로 200
의 경우는 GET
요청이 성공적으로 수행됐을 때의 결과를 나타냅니다.
201
의 경우는 POST
요청이 성공적으로 수행되어 새로운 리소스가 생성
되었음을 알려주는 상태코드로 응답으로 생성된 리소스의 정보가 바디와 Location헤더
로 식별되서 내려옵니다. (Location헤더안에는 새로 생성된 리소스의 URI가 담겨있습니다.)
202
의 경우는 요청이 성공적으로 접수되었으나, 지금 당장은 처리하지 않는다는 뜻을 갖고있다고 합니다. 지금 당장 요청을 수행하지 않고 나중에 한번에 처리(배치 처리
)같은 곳에서 사용된다고 합니다.
204
의 경우는 서버가 요청을 수행했지만 따로 보낼 메시지 바디의 내용이 없을 경우의 응답이라고 합니다.
ex) 웹 문서 편집기에서 save버튼
저장의 결과로 아무 내용이 없어도 되긴하지만 UX
의 향상을 위해 응답을 내려주면 좋을것 같습니다.
300
의 경우 서버가 요청에 따라 여러 조치를 선택할 수 있다고 클라이언트에게 선택할수 있는 작업 목록을 제공한다고 합니다.
301
의 경우는 사이트의 URL이 변경되었지만 클라이언트가 전 URL에 접근했을 때 나타나는 상태코드입니다. 서버는 이 경우 301
코드와 함께 Location헤더
에 새로운 URL을 담아 보내고, 브라우저는 이 코드와 헤더를 읽고 자동으로 새로운 URL
로 재요청하게 됩니다.
308
의 경우 301
과 거의 똑같은 기능을 하는데 둘의 차이점이라면 Redirection
과정에서 301
은 POST
메서드로 요청을 보냈지만 두번째 요청에서는 GET
으로 바뀌면서 동시에 body
내용도 버린다고 합니다.
코드 | 동작 |
---|---|
301 | POST -> 301 -> GET, 메시지 바디를 버림 |
308 | POST -> 308 -> POST, 메시지 바디 유지 |
302
는 Found이면서 Temporary Moved
라는 의미도 갖고있습니다. 응답으로 302
코드와 Location헤더
에 일시적으로 이동하는 URL이 담겨있어 이동하기는 하는데, 완전히 이동하는건 아니고 잠깐만 이동하는 것 입니다. 따라서 SEO(검색엔진)
또한 원래의 URL을 갖고 향후 요청시 원래의 URL를 계송 사용합니다. 단 재요청시 메서드가 GET
으로 바뀌면서 바디도 버려질 수 있다고 합니다.
307
은 308
과 동일하게 메서드와 바디를 보존하면서 302
방식과 동일하게 동작합니다.
코드 | 동작 |
---|---|
302 | POST -> 307 -> GET, 메시지 바디를 버림 , 일시적인 리다리엑션 |
307 | POST -> 307 -> POST, 메시지 바디 유지 , 일시적인 리다리엑션 |
303
코드는 302
코드와 동작은 같지만 요청에 대한 응답이 다른 URI에 있기때문에 GET메서드
를 사용해서 얻어와야 한다는 것을 나타냅니다. 302처럼 그냥 바꾸는게 아니라 명세서에 GET
으로 얻어야 한다고 나와있습니다.
위에서 301
이나 302
는 왜 POST메서드로 보냈다가 GET으로 재요청을 할까요?
우리가 쇼핑몰에서 상품을 주문한다는 상황을 가정해봅시다. 물건을 구매(POST
)하면 주문완료 페이지(GET
)가 나타나죠? 만일 이렇게 처리되지 않고 구매하는 페이지를 새로고침하면 다시 POST
요청이 들어가면서 결국 상품을 여러번 구매하는 불상사가 발생할 수 있습니다. 즉, 멱등성
이 성립하지 않는 POST요청에 대한 예방차원에서 이러한 상태코드가 등장한것 같습니다.
304
코드는 캐시를 목적으로 사용됩니다.
서버가 클라이언트에게 리소스가 수정되지 않았음을 알려주고, 클라이언트는 로컬PC에 저장된 캐시를 재사용하라고 알려줍니다.
그러면 브라우저가 이 상태코드를 받고 로컬 캐시
에서 해당 내용을 가져옴으로써 네트워크 비용을 아낄 수 있습니다.
클라이언트가 잘못된 문법등으로 서버가 해당 요청을 처리해주지 못할 때 내려주는 상태 응답 코드입니다.
클라이언트의 문제이기때문에 아무리 재요청을 한다한들 서버에서 요청을 들어줄리가 없습니다.
400
은 4xx 잘못의 설명과 동일합니다. 잘못된 요청으로 인한 상태코드입니다.
401
은 권한이 없는 사용자에 대한 접근 제한 오류입니다. 401
오류 발생시에는 www-authenticate
헤더와 함께 인증 방법을 설명해줍니다.
403
오류는 주로 인증 자격은 있지만, 접근 권한이 불충분한 경우, 관리자 등급
이 아닌 사용자가 로그인은 했지만 관리자 등급이 아니라 리소스에 접근이 불가능한 경우가 있겠습니다.
404
는 이름 그대로 서버에 요청하는 리소스가 없을 경우에 나타납니다. 단지 없을뿐만아니라 서버에서 진짜로 숨기고싶은 리소스
에 대한 접근을 할 때에도 이러한 오류를 낼 수 있다고 합니다.
500
에러는 서버에서 클라이언트 요청을 처리중에 에러가 발생한것 입니다. 서버 내부 문제로 오류가 난 것이고, 애매하다면 보통 500
에러를 낸다고 합니다.
503
에러는 서비스 이용 불가입니다. 서버가 일시적인 과부화
또는 예정된 작업으로 잠시 요청을 처리할 수 없음을 알려줍니다.