게시/리디렉션/가져오기
Post/Redirect/Get이 글은 검증을 위해 인용구가 추가로 필요하다.– · · 책· · (2013년 1월)(이 |
PRG(Post/Redirect/Get)는 양식 제출 후 보여지는 페이지를 다른 시간에 양식을 제출하는 등 나쁜 영향 없이 다시 로드하거나 공유하거나 북마크할 수 있도록 하는 웹 개발 설계 패턴이다.
HTTP POST 요청을 통해 웹 양식을 서버에 제출할 때, 서버 응답을 새로 고치려는 시도는 원본 POST의 내용을 다시 제출하게 하여 웹 구매 중복과 같은 원치 않는 결과를 초래할 수 있다.[1]일부 브라우저는 사용자에게 POST 요청을 재발급하려고 한다고 경고함으로써 이러한 위험을 완화한다.
이 문제를 피하기 위해, 많은 웹 개발자들은 PRG 패턴을[2] 사용한다. 즉, 콘텐츠로 응답하는 대신, 서버는 클라이언트를 다른 위치로 리디렉션하여 POST 요청에 응답한다.HTTP 1.1 규격은 이 상황에서 브라우저가 초기 POST 요청을 재제출하지 않고 서버 응답을 안전하게 새로 고칠 수 있도록 하기 위해 HTTP 303("기타" 참조) 응답 코드를 도입했다.
PRG 패턴은 중복 양식 제출의 모든 시나리오를 다룰 수 없다.예를 들어, 서버 지연으로 인해 초기 제출이 완료되기 전에 웹 사용자가 새로 고치는 경우 특정 사용자 에이전트에서 중복된 POST가 발생한다.
책갈피
사용자 에이전트(예: 브라우저)는 HTTP 요청의 URL만 책갈피로 저장한다.이 때문에, HTTP POST 요청 본문에 기초한 응답은 북마크할 수 없다.PRG 패턴을 사용하면 요청의 URI를 책갈피로 안전하게 작성할 수 있다.
참조
- ^ Grinberg, Miguel (2014). Flask Web Development (1st ed.). O'Reilly. pp. 44–46. ISBN 978-1-449-37262-0.
- ^ Chisholm, Wendy; May, Matt (2008). Universal Design for Web Applications. O'Reilly Media, Inc. p. 36.
외부 링크
- 2004년 8월 Michael Jouravlev의 사후 리디렉션
- POST Adam Vandenberg를 추적하십시오.
- JSF1.2에서 PRG 수행
