Search
Duplicate

HTTP 상태코드 (3xx)

태그
HTTP 상태코드
2 more properties
3xx
요청을 완료하기 위해 추가 조치가 필요한 경우를 말합니다.
Redirection
리다이렉션은 언제 발생할까? 웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면 그 위치로 자동 이동, 즉, 리다이렉트를 합니다.
위의 그림과 같이 만약 요청한 url 이 존재하지 않고, 서버가 응답으로 Location 헤더를 보냈다면, 그 위치로 리다이렉트 됩니다.
리다이렉션에도 종류가 있습니다. 아래에서 영구 리다이렉션, 일시 리다이렉션, 특수 리다이렉션에 대해 알아보겠습니다.
영구 리다이렉션
영구 리다이렉션은 특정 리소스의 URI 가 영구적으로 이동한 경우를 말합니다. 때문에 검색 엔진 등에서도 변경을 인지합니다. 상태코드는 301 과 308 을 예로 들 수 있는데요, 이 둘에도 차이가 존재합니다.

301

301 의 경우, 리다이렉트 시 요청 메서드가 GET 으로 변하고, 본문이 제거될 수 있습니다.

308

308 의 경우 301 과 기능은 같지만 리다이렉트 시 요청 메서드와 본문을 유지합니다. 즉, 입력을 다시 할 필요가 없습니다.
일시적인 리다이렉션
302 Found
301 과 비슷하게 302 의 경우, 리다이렉트 시 요청 메서드가 대부분 GET 으로 변하고, 본문이 제거될 수 있습니다.
307 Temporary Redirect
302 와 기능은 같으나 리다이렉트 시 요청 메서드와 본문을 유지합니다.
303 See Other
302 의 설명을 보면 요청 메서드가 ‘대부분’ GET 으로 변한다고 하였습니다. 이를 확실히 하기 위해 쓰는 응답상태가 303 입니다.
PRG: POST/Redirect/GET
사용 전
만약 POST 로 주문 후에 웹 브라우저를 새로고침하면 어떻게 될까요? 새로고침을 한다는것은 다시 요청한다는 것입니다. 때문에 중복 주문이 될 수 있습니다.
위의 그림을 보면 POST 로 주문 후 나온 결과화면에서 새로고침이 일어나기 때문에 다시 POST 로 요청을 하게 됩니다. 때문에 중복 주문이 일어나는 것이죠. 이를 해결하기 위해서는 어떻게 해야할까요?
사용 후
PRG 를 사용하면 됩니다. POST 로 주문 요청을 서버에 보내면 서버는 응답코드로 200 OK 가 아닌 302 Found 를 보냅니다. 그러면 상태코드에 맞게 자동 리다이렉트와 동시에 요청 메서드는 GET 으로 변하게 됩니다. 때문에 결과 화면에서 새로고침을 해도 주문 요청을 보내지 않고 결과 화면만 요청하게 됩니다.
기타 리다이렉션
300 Multiple Choices ⇒ 안쓴다
304 Not Modified
주로 조건부 GET, HEAD 요청시에 사용되는 응답코드 입니다. 캐시를 목적으로 사용하는데요, 이는 클라이언트에게 리소스가 수정되지 않았음을 알려줍니다. 따라서 클라이언트는 로컬 PC 에 저장된 캐시를 재사용합니다. 즉, 캐시로 리다이렉트 합니다. 이러한 특성 때문에 304 응답은 응답에 메세지 바디를 포함하면 안됩니다.