-
[네트워크] HTTP 상태코드 정리IT/네트워크 2022. 10. 7. 13:05
📑 상태코드란 ?
상태코드는 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능이다. 코드가 의미하는 기능을 대표적으로 적어보면 아래와 같다.
📌 1xx ( Informational) : 요청이 수신되어 처리중, (거의 사용하지 않음)
📌 2xx ( Successful) : 요청 정상 처리
📌 3xx ( Redirection) : 요청을 완료하려면 추가 행동이 필요
📌 4xx ( Client Error) : 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행할 수 없음
📌 5xx ( Server Error ) : 서버 오류, 서버가 정상 요청을 처리하지 못함📑 2xx - 성공
📌 200 : OK
📌 201 : Created
📌 202 : Accepted
📌 204 : Not Content✔ 200
: 클라이언트가 요청을 보냈을 때 요청이 성공하면 응답 메시지로 200이 온다.
✔ 201
: 요청을 성공해서 새로운 리소스가 생성되면 201이 오는데, 예를들어 POST 메소드를 사용해 요청을 보냈을 때 생성된 리소스는 응답의 Location 헤더 필드로 식별해서 응답을 보낸다.
✔ 202
: 요청이 접수되었으나 처리가 완료되지 않았을 때, 잘 사용되지 않는다.
✔ 204
: 서버가 요청을 성공적으로 수행했지만, 응답 페이로드 본문에 보낼 데이터가 없다. 즉) body에 내용이 없다. 예를들어 게시글을 작성하다 임시저장 버튼을 클릭한다. 그럼 save 버튼 결과로 데이터는 저장되겠지만 서버에서 클라이언트로 응답할 메시지는 따로 없다. 따라서 204 메시지만으로도 성공을 인식할 수 있다.
📑 3xx - 리다이렉션
요청을 완료하기 위해 유저 에이전트(client 프로그램, 주로 웹 브라우저)의 추가 조치, 작업이 필요하다. 웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동한다.
📌 300 : Multiple choices
📌 301 : Moved Permanently
📌 302 : Found
📌 303 : See Other
📌 304 : Not Modified
📌 307 : Temporary Redirect
📌 308 : Permanet Redirect만약 어떤 이벤트 페이지가 있었는데 다른 이벤트로 변경되어 페이지 URI가 바꼈다면? 근데 이미 사용자들은 북마크라던지 이전의 URI로 웹브라우저에 검색을 한다면? 그럼 서버는 Location에 리다이렉션할 URI를 응답해서 클라이언트는 Location으로 자동 리다이렉트하게 된다.
리다이렉션의 종류로 3가지가 있다.
🔨 영구 리다이렉션 : 특정 리소스의 URI가 영구적으로 이동한다.
ex ) /event -> /new-event
🔨 일시 리다이렉션 : 일시적인 변경
ex) 주문 완료 후 주문 내역 화면으로 이동한다.
🔨 특수 리다이렉션 : 결과 대신 캐시를 사용한다.🎃 영구 리다이렉션 (301, 308)
리소스의 URI가 영구적으로 이동한다. 즉) 원래 URL을 사용하지 않고 검색 엔진 등에서도 변경을 인지한다. 둘다 많이 사용하진 않지만 알아보도록 하자.
✔ 301 Moved Permanently
: 리다이렉트시 요청 메서드가 GET으로 변하고, 본문이 제거될 수 있음. 이는 무슨말이냐면, 만약 POST로 회원 정보를 입력하는 요청 메시지를 보냈다. 그랬을때 서버에서 301 메시지를 보낸다면 다른 페이지로 리다이렉트하면서 사용자가 입력한 정보들은 제거되고 GET으로 새로운 페이지를 조회한다.
✔ 308 Permanent Redirect
: 301과 기은 같으나 리다이렉트 요청 메서드와 본문 유지한다. ( 즉 POST로 보내면 POST로 새로운 페이지에 요청을 보낸다. ) 301의 불편한 점, 사용자가 작성한 내용이 사라진다는 점을 보완하기 위해 308이 정의됐지만 잘 사용하지 않는다. why?? 예를 들어 새로운 페이지로 이동한다면 그 새로운 페이지는 이미 많이 리뉴얼 됐을 가능성이 크다. 그럴 때 사용자가 입력한 정보는 새로운 페이지의 형식과 맞지 않을 수 있기에 굳이,, 사용자가 입력한 정보를 그대로 사용하지 않을 가능성이 크다.
🎃 일시적인 리다이렉션 ( 302, 307, 303 )
리소스의 URI가 일시적으로 변경된다. 따라서 검색 엔진 등에서 URL을 변경하면 안된다.
리다이렉션은 왜 사용해야 되나? 만약 POST로 음식을 주문했다. 그랬을 때 새로고침을 한다면? 중복 주문이 들어갈 수 있다. 이를 방지하기 위해 주문하는 POST 요청을 하면 서버에서는 Location으로 주문 확인 페이지를 보여줘야한다.
✔ 302 Found
: 301 번과 같이 리다이렉트 요청 시 메서드가 GET으로 변하고, 본문이 제거될 수 있다.
✔ 307 Temporary Redirect
: 302와 같으나 308번과 같이 리다이렉트 요청 메서드와 본문 유지한다.
✔ 303 See Other
: 302와 기능은 같으나 리다이렉트 요청 시 메서드가 무조건 GET으로 변경된다.
HTTP 상태코드는 307, 303을 권장하지만 이미 많은 애플리케이션 라이브러리들이 302를 사용하고 있다. 사실 자동 리다이렉션시 GET으로 변해도 되면 그냥 302를 사용해도 큰 문제가 없다.
🎃 기타 리다이렉션 ( 304 )
✔ 304 Not Modified
: 캐시를 목적으로 사용하는 304는 클라이언트에게 리소스가 수정되지 않았음을 알려준다. 따라서 클라이언트는 로컬 pc에 저장된 캐시를 사용한다. ( 캐시로 리다이렉트하는 의미) 이는 많이 사용되는 상태코드이므로 뒤에서 한 번 더 정리할 예정이다. 304 응답은 응답에 메시지 바디를 포함하면 안된다.
📑 4xx - 클라이언트 오류
클라이언트의 요청에 잘못된 문법등으로 서버가 요청을 수행할 수 없을때 400번대 에러가 나타난다. 클라이언트가 이미 잘못된 요청을 보내고 있기에 새로고침이나 재시도를 해도 실패한다. 예를들어 요청 구문이나 메시지 같은데서 오류가 날 수 있는데, 요청 파라미터가 잘못되거나 API 스펙이 맞지 않을 때 나타난다. 이는 사용자가 당황하지 않게 백엔드에서 다양한 validation 검사로 처리를 잘 해야한다.
✔ 401 Unauthorized
: 클라이언트가 해당 리소스에 대한 인증이 필요하다. 인증(Authentication)되지 않았음을 의미한다. 401 오류 발생시 응답에 WWW-Authenticate 헤더와 함께 인증 방법을설명해야한다. 인증과 인가는 다른 의미인데 인증(Authentication)은 본인이 누군지 확인하는 로그인 같은 처리를 말하며, 인가(Authorization)은 권한을 부여, 관리자 권한, vip 등급 등 특정 리소스에 접근할 수 있는 인증이 있어야 인가가 있다고 처리한다. 둘의 의미랑 스펠링 헷갈린다,,,
✔ 403 Forbidden
: 서버가 요청을 이해했지만 승인을 거부한다. 예를들어 인증 자격(로그인은 했지만) 접근 권한(등급이 안됨)이 불충분한 경우 403 에러가 발생한다.
✔ 404 Not Found
: 요청 리소스를 찾을 수 없다. 예를들어 브라우저에 어떤 url을 입력했는데 해당 url이 없는 경우 404 에러가 난다. 웹 페이지 제작하면서 제일 많이 본 에러404 , 500 ,,,
📑 5xx - 서버 오류
서버 오류는 서버에 문제가 있기 때문에 클라이언트가 재시도하면 성공할 수 있다. 그사이 복구될 수 있기 때문에! 서버 문제가 있음 대부분 500오류가 나는데 이는 매우 중대한 오류일 때 사용하도록 한다. 큰 오류가 아닌, 아님 다른 오류인데 서버 오류로 처리하면? 만약 사용자가 어떤 페이지로 이동했는데 500이 뜨면 이 회사 뭐야,, 일 안 하나 싶을 수 있다.
반응형'IT > 네트워크' 카테고리의 다른 글
[네트워크] 1. 네트워크와 케이블 (LAN, 이더넷, MAC, 캐스트, OSI 7 Layer) - 후니의 쉽게쓴 시스코 네트워킹 (0) 2024.08.22 [네트워크] 쿠키, 세션, 캐시 정의와 차이점 알아보기 (0) 2022.10.09 [네트워크] HTTP 메소드 (GET, POST, PUT, PATCH, DELETE) (1) 2022.10.07 [네트워크] HTTP란? (특징, 구조, 상태, 메시지) (0) 2022.10.06 [네트워크] IP, TCP/UDP, URI 인터넷 프로토콜 살펴보기 (0) 2022.10.06