HTTP forward와 redirect
HTTP 통신에서 request를 다른 URL로 보내버리는 기법인 forward와 redirect를 알아보자.
포워딩 (Forwading)
포워딩은 클라이언트의 request를 서버 내부에서 다른 리소스로 전달하는 기법이다.
모든 처리가 서버 내부에서 이루어지기 때문에 클라이언트는 이 과정을 알 수 없으며, 클라이언트는 처음 요청한 URL을 유지하게 된다.
단일 요청/응답 구조를 가진다.
리디렉션 (Redirection)
리디렉션은 클라이언트의 request를 새로운 URL로 이동하도록 서버가 클라이언트에게 재안내하는 기법이다.
서버는 클라이언트에게 HTTP 상태코드와 함께 새로운 URL을 제공하여 다시 request를 보낼 것을 명시적으로 알린다. 클라이언트는 새로운 URL로 다시 request를 보낸다.
여러 번의 요청/응답 구조를 가진다.
POST request는 리디렉션을 하면 안된다?
HTTP Method 중에서 POST/PUT/PATCH/DELETE는 body 데이터를 포함하여 request를 보낼 수 있는데 보안/안정성 정책 때문에 body 데이터가 다른 URL에 전달되지 않도록 리디렉션 URL로의 request는 GET request으로 바뀌게 된다. (일반적으로 브라우저가 처리)
즉, POST request를 리디렉션하면 새 URL로 GET request가 전송되기 때문에 의도했던대로 동작하지 않을 가능성이 있다.
POST request에 리디렉션을 사용하는 PRG(Post-Redirect-GET) 패턴
위에서 말했던 것과 반대로 일부러 POST request를 리디렉션하는 기법도 존재한다.
브라우저에서 POST request 페이지를 새로고침 할 경우 request가 중복 발생하는데 이를 막기 위해서 POST request의 요구사항을 모두 처리 후 response로 리디렉션을 유도하면 새로고침을 통한 POST request가 중복 발생하지 않게되므로 멱등성을 지킬 수 있게 된다.
참조
'Programming > 프로그래밍 이론' 카테고리의 다른 글
[프로그래밍 이론] In-app browser, External browser (1) | 2020.07.03 |
---|---|
[프로그래밍 이론] 두 점 사이의 절대각도를 재는 atan2 (3) | 2020.06.03 |
[프로그래밍 이론] 반각문자 @와 전각문자 @ (1) | 2019.10.10 |
[프로그래밍 이론] JWT (Json Web Token) (0) | 2019.04.19 |
[디자인 패턴] 팩토리 메소드 패턴 (Factory method pattern) (0) | 2019.03.20 |
댓글