내가 보려고 정리하는/Spring

웹 : 300번 응답코드 : 0309

보동이용용 2023. 3. 9. 11:14
반응형

dispatche -  forward

 

dispatch - include

forward 구조 : B 전달

Include 구조 : A+B 전달 : 페이지 모듈화

클라이언트는 1번의 주소만 알고 있음. A가 모든 업무 처리했다고 생각. :dispatch구조

Defines an object that receives requests from the client and sends them to any resource (such as a servlet, HTML file, or JSP file) on the server.

 

 

redirect

1,2번 요청, 응답이 끝나자마자 b의 입장에서는 3번의 요청이 다시 오는 것인지 새로운 것인지 모름.

2번은 바디가 없는 응답을 보낸다. : 300번대 코드 >> 3번의 요청을 유도 : Head에  Location 정보를 담아 보내는 것.

B는 새로운 요청으로 받아들임.

Dispatch와 redirect

>> 차이점 : 원본구조를 가지고 분기하느냐, 아니면 원본구조 따로하고 b요청으로 다시 새로 보내느냐

 

<h4>웹어플리케이션에서 흐름 제어(A->B) 방법</h4>
<pre>
	1. Request Dispatche(요청분기)
		- Forward : 요청은 A(서블릿)로 응답은 B(JSP 활용케이스가 많음.)에서만 처리됨(Model2 구조에서 활용). 서버사이드 위임 처리 방식.
		<%
			String path = "/04/standard.jsp";
// 			RequestDispatcher rd = request.getRequestDispatcher(path);
// 			rd.forward(request, response);
// 			rd.include(request, response);
		%>	
<%-- 		<jsp:include page="<%=path %>"/> --%> 
<%--		//action구조, buffer에 의해서 중간에 들어갈 수 있다.  --%>
		- Include : 요청은 A로 전송->서버내에서 B로 이동->A로 복귀
					(최종 응답은 A+B의 형태로 전송, A가 B를 내포함.)=>페이지 모듈화에서 활용
	2. Redirect
			요청은 A로 전송 -> Body 가 없고, 상태코드가 3xx 인 응답 전송(Location 헤더 포함) ==> connectLess, stateLess
			 -> Location(B) 방향으로 새로운 요청 전송 -> B에서 최종 응답 전송. 
		301/302 : 원본 요청(A)에 대한 정보가 삭제된 후, GET 방식의 새로운 요청이 redirection.
					POST->Redirect->GET ==> PRG 패턴 처리구조.
		307 : REST 처리에서 많이 활용되며, PUT/DELETE 요청에서 활용.
				원본 요청이 발생하고, redirection 될때, 원본의 method 와 body 를 복사해서 새로운 요청이 발생함.
		<%--
			response.sendRedirect(request.getContextPath() + path); 
			 //클라이언트가 300번대받아서 다시 요청해야하기 때문에 클라이언트가 사용할 수 있는 주소를 보낸다.
		--%>
</pre>

https://developer.mozilla.org/ko/docs/Web/HTTP/Status/307

 

307 Temporary Redirect - HTTP | MDN

원래 요청한 메소드와 Body 를 재사용하여 요청을 리다이렉트 합니다. 여기서 메소드를 GET으로 바꾸기 위해서 303 See Other를 사용하시면 됩니다. 이것은 PUT요청에 업로드된 리소스가 아닌 "You succes

developer.mozilla.org

302= 원본요청에 대한 정보 지움

307 = 클라이언트가 알고있는 이전 요청에대한 메서를 그대로 가지고 보낸다.

request의 body를 복사하여 보낸다. get방식은 복사할 대상이 없으니까 parameter로 보낼 수 없다. 

put 메서드에서 주로 발생한다. get과 post에서는 307을 거의 만나지 않는다. 거의 302...

나중에 스프링 사용하면 put메서드 사용하게 되어서 307 만난다.

 

 

반응형