Outsider's Dev Story

Stay Hungry. Stay Foolish. Don't Be Satisfied.
RetroTech 팟캐스트 44BITS 팟캐스트

리다이렉트 방식에 대해서.....

리다이렉트는 현재페이지를 다른페이지로 보내는 것을 말한다. 포워드와는 다르게 리다이렉트는 클라이언트단에서(브라우저) 발생하게 되고 결과적으로 보면 새로운 URL로 요청이 다시 일어나도록 하는 것이다. 자바의 입장에서 보면 리다이렉트에는 3가지 방법이 있다.

  1. 메타태그 이용
    <meta http-equiv="refresh" content="0; url=http://www.google.co.kr">

  2. 자바스크립트 이용
    document.location.href= "http://www.google.co.kr";

  3. sendRedirect이용
    <%
        response.sendRedirect("http://www.google.co.kr");
    %>

1,2번의 방법은 브라우저가 소스를 보고 판별해서 재요청을 하는것이고 3번째 방법은 전에 포스팅에 올렸던대로 header정보를 이용해서 브라우저가 리다이렉트를 하도록 서버쪽에서 코드를 심는 방법이다.(자바에선 이렇게 쓰고 헤더를 이용하는 방법은 다른 언어에도 있다.)

나는 1번은 잘 사용안하고 보통 2번을 사용하거나 3번을 사용한다. 솔직히 그냥 그때 기분내키는대로?? ㅡ..ㅡ

여러가지 용도가 있겠지만 가장 노말하고 일반적으로 쓰이는 곳이 게시판등의 글등록이 아닐까 싶다.

등록폼 페이지 -> 등록 처리 페이지 -> 처리 후 이동할 페이지

보통 이런 단계를 밟아서 페이지를 만든다. 이제 가장 노말한 형태이다. 등록폼에서 내용을 입력하고 submit을 누르면 등 등록처리 페이지에서 등록처리를 해서 DB에 넣고 alert() 메시지로 등록 성공 혹은 실패 메시지를 뿌려준 뒤에 상황에 맞는 페이지로 이동을 시킨다. 여기서 이동을 시킬때 리다이렉트를 할 필요가 있다. 이동자체야 큰 차이점은 없지만 사용자 입장에서 2번과 3번 방법에 큰 차이점이 있다.

이 2가지 방법 사이에 가장 큰 차이점은 "뒤로가기"의 활성화 여부이다. 이건 UX적인 면에서 큰 차이점이라고 생각한다. 흔히들 많이 보았을 것이다. 처리후 이동한 페이지에서 뒤로가기 버튼을 누르면 등록처리페이지로 뒤로가기가 되서 다시 alert이 뜨고 처리후 이동페이지로 다시 오게되는 현상(또는 에러가 나거나...) 의도대로 하면 되겠지만 처리페이지는 DB저장등을 위해서 존재하는 페이지이기 때문에 뒤로가기과정에서는 나타나지 않는게 정상이 아닌가 싶다. 그래서 좀 정리를 해 봤다.

자바스크립트 document.location.href= "http://www.google.co.kr";로 리다이렉트 했을 경우

IE6 : 등록처리 페이지로 뒤로가기 된뒤 다시 alert뜨고 원래페이지로 다시 돌아옴
IE7 : 등록처리 페이지로 뒤로가기 된뒤 다시 alert뜨고 원래페이지로 다시 돌아옴
Firefox2 : 등록폼 페이지로 뒤로가기 됨
Firefox3 : 등록폼 페이지로 뒤로가기 됨
Opera 9 : 등록처리 페이지로 뒤로가기 되지만 스크립트는 실행되지 않음.
Safari 3 : 등록처리 페이지로 뒤로가기 되지만 스크립트는 실행되지 않음.
Chrome : 등록처리 페이지로 뒤로가기 되지만 Confirm Form Resubmission라는 에러나옴


Http Header를 이용한 response.sendRedirect("http://www.google.co.kr");를 했을 경우

IE6 : 등록폼 페이지로 뒤로가기 됨
IE7 : 등록폼 페이지로 뒤로가기 됨
Firefox2 : 등록폼 페이지로 뒤로가기 됨
Firefox3 : 등록폼 페이지로 뒤로가기 됨
Opera 9 : 등록폼 페이지로 뒤로가기 됨
Safari 3 : 등록폼 페이지로 뒤로가기 됨
Chrome : 등록폼 페이지로 뒤로가기 됨

파이어폭스를 제외하고는 location.href를 사용하면 등록처리 페이지가 뒤로가기로 활성화가 된다. 사용자 편의성과 보안(?)면에서도 Http Header를 이용한 방식이 더 좋아보인다.

참고삼아 메타태그를 이용해서도 테스트를 해보았다.  메타태그를 이용했을때도 등록처리 페이지는 뒤로가기에 해당되지 않는다...
IE6 : 등록폼 페이지로 뒤로가기 됨
IE7 : 등록폼 페이지로 뒤로가기 됨
Firefox2 : 등록폼 페이지로 뒤로가기 됨
Firefox3 : 등록폼 페이지로 뒤로가기 됨
Opera 9 : 등록폼 페이지로 뒤로가기 됨
Safari 3 : 등록폼 페이지로 뒤로가기 됨
Chrome : 등록폼 페이지로 뒤로가기 됨


덧) 테스트한 웹브라우저 버전
IE6, IE 7.0, Firefox 2.0.0.14, Firefox 3.0.3, Opera 9.60 beta, Safari 3.1.2, Google Chrome 0.2.149.30

2008/10/31 00:41 2008/10/31 00:41