Redirect / Forward

jooog·2022년 3월 22일
0

스프링

목록 보기
15/26

Redirect

클라이언트가 잘못된 url로 요청을 보내면 브라우저가 자동으로 request header의 Location 주소를 읽어 알맞은 요청을 보내는 것을 말한다.

클라이언트에서 보낸 요청이 Get인지 Post 요청인지와 상관 없이 브라우저가 보내는 요청은 전부 Get이다.

Spring에서의 redirect 과정

@PostMapping("/register/save")
    public String save(User user, Model m) throws Exception{
        if(!isValid(user)){
            String msg = URLEncoder.encode("잘못된 정보입니다", "utf-8");
            m.addAttribute("message", msg);
            return "redirect:/register";
        }
    }

클라이언트에서 register/save로 요청이 들어왔지만 유효성 검사를 통과하지 못해서Controller는 뷰이름 대신 redirect를 반환한다.

if(!isValid(user)){
            String msg = URLEncoder.encode("잘못된 정보입니다", "utf-8");
            m.addAttribute("message", msg);
            return "redirect:/register";

Controller에서 redirect를 반환하면 DispatcherServlet은 redirect를RedirectView에 전달하고 RedirectView에서 생성한 응답헤더의 Location 주소를 읽어 브라우저가 자동으로 요청을 보내게된다.

Forward

사용자가 요청한 내용을 그대로 올바른 주소로 전달해주는 과정을 말한다.

@PostMapping("/register/save")
    public String save(User user, Model m) throws Exception{
        if(!isValid(user)){
            String msg = URLEncoder.encode("잘못된 정보입니다", "utf-8");
            m.addAttribute("message", msg);
            return "forward:/register";
        }
    }

Controller에서 forward를 DispatcherServlet에 전달하면 해당 forward문자열을 InternalResourceView로 전달한다.
InternalResourceView는 해당 주소(요청)를 DispatcherServlet에 호출해서 요청된 주소에 연결된 메서드를 호출한다. 따라서 forward는 InternalResourceView에서 처리하며 내부적으로 진행되는 과정이다.

Redirect와 Forward의 차이

redirect는 요청과 응답이 각각 두번씩인 반면 forward는 요청과 응답이 한번씩 이루어진다.

0개의 댓글