Post/Redirect/Get

Programming/Network 2010. 5. 31. 15:51

Post/Redirect/Get( PRG ) 는 웹 개발자들이 특정 중복되는 폼을 요청하는 것을 피하도록 돕고, user agent 가 bookmarks, refresh 버튼을 좀더 더 직관적으로 사용할 수 있도록 해주는 흔한 디자인 패턴이다.
( user agent : 분산 컴퓨팅 시스템의 통신에서 사용되는 네트워크 프로토콜을 사용하는 클라이언트 프로그램을 말하고, 이 용어는 주로 World Wide Web 을 엑세스 하는 어플리케이션을 말한다. SIP( Session Initiation Protocol )와 같은 다른 시스템에서는 user agent 라는 용어를 통신 세션의 양 끝을 의미할 때 사용한다.
 출처 : http://en.wikipedia.org/wiki/User_agent )
HTTP POST 요청을 통해 서버에 웹 폼이 전달될 때, 특정 user agents에서 서버 응답을 재요청하려고 하는 웹 사용자는 original HTTP POST 요청 내용을 재요청할 수있고, 중복 웹 구매와 같은 원하지 않았던 결과를 야기할 수 있다. 이 문제를 피하기 위해 많은 웹 개발자 들이 웹페이지를 직접적으로 보내주는 대신에, POST operation이 redirection 명령어를 return 하는, PRG 패턴을 사용하고 있다.( redirection command : HTTP "Location" response header 를 함께 사용하여 HTTP 303 응답 코드 ( 가끔씩 HTTP 302 ) 를 사용하며, 브라우저에게 GTTP GET 요청을 사용하여 다른 페이지를 로드 하라는 명령을 한다 ) 그래서, 웹 사용자는 초기 HTTP POST 요청을 재전송하지않고, 서버 응답을 안전하게 재요청한다.
쉽게 설명을 하자면, 아래 두 그림을 보면 명확하게 알 수 있다.

<그림1>

<그림1>은 Double Submit Problem 으로, 사용자가 구매를 하기위해 "SUBMIT"버튼을 누르면, POST 가 발생하여 DB에 전달이 되고, Confirmation 페이지를 다시 user agent 에게 전달을 해주고 user agent 는 주문이 성공적으로 된 것을 확인 할 수 있는데, 만약 user agent가 refresh page를 하게 되면, 다시 POST 를 발생시키게 되면, 이를 받는 DB 쪽에서는 이 POST 가 refresh 를 위한 것인지, 초기 구매를 위한 것인지 알 수가 없으므로 중복 구매가 발생하게 된다.

<그림2>
<그림2>는 PRG 패턴으로 이를 해결한 것인데, user agent 가 물품 구매시, DB 에 POST 를 전달하고, DB는 user agent에 rediret 를 하고, user agent 는 get을 db 에 요청을 하면, confirmation page를 요청을 하면 그 페이지를 전달해서 볼 수 있고, user agent 가 refresh 를 할 경우, get을 보내어 다시 그 페이지를 볼 수 있게 되어 중복구매를 피할 수 있다.

출처 : http://en.wikipedia.org/wiki/Post/Redirect/Get

'Programming > Network' 카테고리의 다른 글

HTTP and WWW  (0) 2010.08.21
프록시 서버( proxy server )  (0) 2010.08.21
HTTP Method  (0) 2010.06.06
트랜잭션 [ transaction ] 이란?  (0) 2010.05.27
세션 [ session ] 이란?  (0) 2010.05.27

설정

트랙백

댓글