리다이렉트(redirect) vs 포워드(foword)

redirect

웹컨테이너는 sendRedirect() 메소드가 호출되면 브라우저에 응답을 보내는데

응답에는 브라우저가 컨테이너의 응답을 받은 다시 요청을 보낼 새로운 URL 포함되있다.

브라우저에서 완전히 새로운 요청을 하기때문에 요청속성으로 저장되있는 객체도 리다이렉트가 발생하기전에 소멸된다.

예를들어 a.jsp에서 request 속성값을 담아 b.jsp 리다이렉트 시키면... 속성값이 b페이지에

전달되지않는다.(새로운요청을 하므로...)

forward

경우는 포워드를 사용하여 다른자원(jsp servlet)으로 요청을 보내어 처리하여도

클라이언트에는 사실을 알리지않는다( 컨테이너 내에서 처리된다)

리다이렉트와 달리 새로운 요청을 위한 클라이언트와의 통신이 없어서 좀더 나은 성능을 보여준다.

그리고 포워딩시에는 포워딩후에도 요청 속성에 있는 객체들을 사용할수 있다.

그러나 포워드를 클라이언트에 알리지 않으므로( 컨테이너에서만 사용하니까)

URL 변화가 없다..


Redirect
흔히 Request객체를 사용  없으며 Forward Request 객체를  사용 가능하다고 알고 있습니다.  그래서 Forward 빠르며(Request 있는 것을 그대로 쓰므로) Redirection 느리다고 알고 있습니다.(Request 지우고 다시 만드니 느리죠^^)

Forward 경우 URL 바뀌지 않으며 Redirect 경우 URL창의 주소가 바뀌는 것으로 알고 있습니다

앞부분의 내용은 서버에서 어떻게 처리하느냐를 이해하시면 위의 내용이 이해가 가실 겁니다.

Redirection
경우 클라이언트에서 서버로 요청을 보내면 서버는 HTTP Protocol 응답헤더인  location Redirection 될곳의 주소를 넣어서 클라이언트로 응답을 버리죠그런 클라이언트는 Location 값을 읽어 여기가면 있다네라고 생각 다시 그쪽으로 요청을 보내는 겁니다. (결국 요청이 없어지고 새로 생겨 났네요그래서 최초 요청에 포함된 모든 객체를 리다이렉트된 자원에서는 이용 없는 거죠) 그럼 서버는 자원을 응답으로 만들어 다시 클라이언트로 보내는 겁니다. 브라우저 상단 URL 창의 주소가 바뀌겠죠^^;;;

반면 Forward 경우 서버에서 이를 해석하여 컨테이너 안에서 해석을 한다는 의미 입니다. 그래서 forward 곳의 자원을 이용하여 응답을 만들어 보내게 됩니다. 클라이언트는 사실(포워드된 사실) 전혀 알지 못하게 되는 겁니다. 그래서 URL 창의 주소가 처음 요청했던 주소 그대로 있게 되는 것이죠

 

Posted by wychoi
,