CS 정리/Network

HTTP Status, Redirection

tose33 2023. 10. 26. 11:48

클라이언트가 인식할수 없는 상태코드를 서버가 반환하면 클라이언트는 상위 상태코드로 해석해서 처리한다.

예) 299 ??? -> 2xx (Successful)

 

 

2xx (Successful) 

 

 

 

3xx (Redirection)

 

웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, Location 위치로 자동 이동함.

(리다이렉트)

 

클라이언트에서 /event 로 요청함.

서버에서 /event 는 더이상 사용하지 않는 경로라서 301 http 응답, Location 헤더에 /new-event 로 클라이언트에 응답.

클라이언트는 /new-event 로 자동으로 다시 서버로 요청함. 

서버는 200 ok 와함께 /new-event 에 맞는 응답을 클라이언트에게 보냄.

 

영구 리다이렉션

301 Moved Permanently

리다이렉트 요청 메서드가 GET 으로 변함 (POST로 왔어도), 본문이 제거 될 수 있음.

 

308 Permanent Redirect

301과 기능은 같은데, 리다이렉트 요청 메서드와 본문을 유지함.

(POST 로 보내면 리다이렉트도 POST 유지)

 

 

 

일시적인 리다이렉선

302 Found

리다이렉트시 요청 메서드가 GET 으로 변하고, 본문이 제거될수 있음. (301 이랑 유사)

 

307 Temporary Redirect

302와 기능은 같지만, 리다이렉트시 요청 메서드와 본문 유지 (요청 메서드를 변경하면 안된다)

 

303 See Other 

302와 기능은 같지만, 리다이렉트시 요청 메서드가 GET 으로 변경.

 

 

보통 실무에선 301, 302 를 거의 쓴다.

 

 

PRG : Post/Redirect/Get

POST 로 주문후에 웹 브라우저를 새로고침하면, 

새로고침은 마지막에 한 요청을 다시 보낸다 따라서 주문 POST 요청이 다시 나감.

중복 주문이 될 수 있다.

 

 

해결 방법은 POST로 주문 후에 주문 결과 화면을 GET 메서드로 리다이렉트 하면 된다.

이렇게 하면 새로고침해도 결과 화면을 GET으로 조회한다.

 

 

 

 

 

4xx (Client Error)

오류의 원인이 클라이언트에 있음.

 

클라이언트가 이미 잘못된 요청, 데이터를 보내고 있기 때문에 똑같은 재시도가 실패한다.

그런데 5xx (Server Error) 는 다르다.

서버의 장애는 일시적일수 있기 때문에 (예를들어 디비에 오류가 있는데 해결됨), 5xx 오류가 났어도 똑같이 재요청시 성공할수도 있다.

 

 

400 Bad Request

클라이언트가 잘못된 요청을 해서 서버가 요청을 처리할수 없음.

예) 요청 파라미터가 잘못됨, api 스펙 맞지 않음.

 

401 Unauthorized

인증되지 않음.

로그인이 안됨.

 

403 Forbidden

서버가 요청을 이해했지만 승인을 거부함.

주로 인증 자격 증명은 있지만, 접근 권한이 불충분한 경우.

예) 어드민 등급이 아닌 사용자가 로그인은 했지만, 어드민 등급 리소스에 접근하는 경우.

 

404 Not Found

요청 리소스가 서버에 없음.

또는 클라이언트 권한이 부족한 리소스에 접근할 때 해당 리소스를 숨기고 있을 때.

 

 

5xx (Server Error)

서버 문제로 오류 발생.

서버에 문제가 있기 때문에 재시도하면 성공할 수도 있음.

 

500 Internal Server Error

서버 문제로 오류 발생, 애매하면 500 오류

 

501 Service Unavailable

서비스 이용 불가.

서버가 일시적인 과부하 또는 예정된 작업으로 잠시 요청을 처리할수 없음.