HTTP(3/n) - HTTP 상태코드

이의섭·2022년 1월 16일
0

네트워크

목록 보기
4/8
post-thumbnail

상태코드

클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능

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

모르는 상태코드일 경우

상태코드는 명세서에 나타나있는데 명세서에 나타나지 않은 상태코드들의 경우엔 각각 상위 상태코드로 해석해서 처리하게 됩니다.

  • 299 ??? -> 2xx(성공)
  • 451 ??? -> 4xx(니잘못)
  • 599 ??? -> 5xx(내잘못)
  • 응답을 내려주는 주체는 서버이기때문에 서버==나

2xx - 성공

1xx의 경우는 거의 사용하지 않는다고 합니다. -> 생략

  • 200 OK
  • 201 Created
  • 202 Accected
  • 204 No Content

순서대로 200의 경우는 GET요청이 성공적으로 수행됐을 때의 결과를 나타냅니다.

201의 경우는 POST요청이 성공적으로 수행되어 새로운 리소스가 생성되었음을 알려주는 상태코드로 응답으로 생성된 리소스의 정보가 바디와 Location헤더로 식별되서 내려옵니다. (Location헤더안에는 새로 생성된 리소스의 URI가 담겨있습니다.)

202의 경우는 요청이 성공적으로 접수되었으나, 지금 당장은 처리하지 않는다는 뜻을 갖고있다고 합니다. 지금 당장 요청을 수행하지 않고 나중에 한번에 처리(배치 처리)같은 곳에서 사용된다고 합니다.

204의 경우는 서버가 요청을 수행했지만 따로 보낼 메시지 바디의 내용이 없을 경우의 응답이라고 합니다.

ex) 웹 문서 편집기에서 save버튼

저장의 결과로 아무 내용이 없어도 되긴하지만 UX의 향상을 위해 응답을 내려주면 좋을것 같습니다.

3xx - 재요청

  • 300 Multiple Choices
  • 301 Moved Permanently
  • 302 Found
  • 303 See Other
  • 304 Not Modified
  • 307 Temporary Redirect
  • 308 Permanent Redirect

300의 경우 서버가 요청에 따라 여러 조치를 선택할 수 있다고 클라이언트에게 선택할수 있는 작업 목록을 제공한다고 합니다.

영구 재요청

301의 경우는 사이트의 URL이 변경되었지만 클라이언트가 전 URL에 접근했을 때 나타나는 상태코드입니다. 서버는 이 경우 301코드와 함께 Location헤더에 새로운 URL을 담아 보내고, 브라우저는 이 코드와 헤더를 읽고 자동으로 새로운 URL로 재요청하게 됩니다.

308의 경우 301과 거의 똑같은 기능을 하는데 둘의 차이점이라면 Redirection 과정에서 301POST메서드로 요청을 보냈지만 두번째 요청에서는 GET으로 바뀌면서 동시에 body내용도 버린다고 합니다.

코드동작
301POST -> 301 -> GET, 메시지 바디를 버림
308POST -> 308 -> POST, 메시지 바디 유지

일시적인 재요청

302는 Found이면서 Temporary Moved라는 의미도 갖고있습니다. 응답으로 302코드와 Location헤더에 일시적으로 이동하는 URL이 담겨있어 이동하기는 하는데, 완전히 이동하는건 아니고 잠깐만 이동하는 것 입니다. 따라서 SEO(검색엔진)또한 원래의 URL을 갖고 향후 요청시 원래의 URL를 계송 사용합니다. 단 재요청시 메서드가 GET으로 바뀌면서 바디도 버려질 수 있다고 합니다.

307308과 동일하게 메서드와 바디를 보존하면서 302방식과 동일하게 동작합니다.

코드동작
302POST -> 307 -> GET, 메시지 바디를 버림, 일시적인 리다리엑션
307POST -> 307 -> POST, 메시지 바디 유지, 일시적인 리다리엑션

303코드는 302코드와 동작은 같지만 요청에 대한 응답이 다른 URI에 있기때문에 GET메서드를 사용해서 얻어와야 한다는 것을 나타냅니다. 302처럼 그냥 바꾸는게 아니라 명세서에 GET으로 얻어야 한다고 나와있습니다.

POST/Redirect/GET

위에서 301이나 302는 왜 POST메서드로 보냈다가 GET으로 재요청을 할까요?

우리가 쇼핑몰에서 상품을 주문한다는 상황을 가정해봅시다. 물건을 구매(POST)하면 주문완료 페이지(GET)가 나타나죠? 만일 이렇게 처리되지 않고 구매하는 페이지를 새로고침하면 다시 POST요청이 들어가면서 결국 상품을 여러번 구매하는 불상사가 발생할 수 있습니다. 즉, 멱등성이 성립하지 않는 POST요청에 대한 예방차원에서 이러한 상태코드가 등장한것 같습니다.

캐시를 목적

304코드는 캐시를 목적으로 사용됩니다.
서버가 클라이언트에게 리소스가 수정되지 않았음을 알려주고, 클라이언트는 로컬PC에 저장된 캐시를 재사용하라고 알려줍니다.

그러면 브라우저가 이 상태코드를 받고 로컬 캐시에서 해당 내용을 가져옴으로써 네트워크 비용을 아낄 수 있습니다.

4xx - 니잘못

  • 400 Bad Request
  • 401 Unauthorized
  • 403 Forbidden
  • 404 Not Found

클라이언트가 잘못된 문법등으로 서버가 해당 요청을 처리해주지 못할 때 내려주는 상태 응답 코드입니다.

클라이언트의 문제이기때문에 아무리 재요청을 한다한들 서버에서 요청을 들어줄리가 없습니다.

400은 4xx 잘못의 설명과 동일합니다. 잘못된 요청으로 인한 상태코드입니다.

401은 권한이 없는 사용자에 대한 접근 제한 오류입니다. 401오류 발생시에는 www-authenticate헤더와 함께 인증 방법을 설명해줍니다.

403오류는 주로 인증 자격은 있지만, 접근 권한이 불충분한 경우, 관리자 등급이 아닌 사용자가 로그인은 했지만 관리자 등급이 아니라 리소스에 접근이 불가능한 경우가 있겠습니다.

404는 이름 그대로 서버에 요청하는 리소스가 없을 경우에 나타납니다. 단지 없을뿐만아니라 서버에서 진짜로 숨기고싶은 리소스에 대한 접근을 할 때에도 이러한 오류를 낼 수 있다고 합니다.

5xx - 내잘못

  • 500 Internal Server Error
  • 503 Service Unavailable

500에러는 서버에서 클라이언트 요청을 처리중에 에러가 발생한것 입니다. 서버 내부 문제로 오류가 난 것이고, 애매하다면 보통 500에러를 낸다고 합니다.

503에러는 서비스 이용 불가입니다. 서버가 일시적인 과부화 또는 예정된 작업으로 잠시 요청을 처리할 수 없음을 알려줍니다.

profile
사용자 중심 생각하는 프론트엔드 개발자가 되고 싶은..

0개의 댓글