<수업필기>

          P to P
                         Request
     --------------------------------------------------------->
c  <---------------------------------------------------------s
                         Response
                         R.Line : Status.Code(xxx/성공,실패) exP 100,200,300,400,500
                         R.Header  : M.D --- content-*
                                                    ----cache-*
                                                    ----refresh
                         R.Body

동기 처리 : rock을 가지고 있기때문에 응답데이터가 다 와야 처리가 됨 (질서가 있는구조)
비동기 처리 : rock의 개념이 없고 빨리 선점하면 처리가 됨 (질서가 없는 구조)

 

 

 

📌 클라이언트의 의도적 전송 데이터 분류


1. requset parameter(문자열, urlEncoded[percent encoded] string)
                : String getParameter(name), Map&lt;String,String[]&gt; getParameterMap(),
                  String[] getParameterValues(name), Enumeration&lt;String&gt; getParameterNames()
 - line 을 통한 query string(1.보내는 모든 데이터는 문자열 2.이름과 값 쌍의 구조) / 
 - body 을 통한 form data


2. multi part : Part(servlet 3.x 부터) 타입으로 하나의 part 데이터를 캡슐화함.
                   getPart, getParts

3. content payload : body 영역을 통해 특정 컨텐츠 타입(Content-Type)으로 전송되는 경우
                  역직렬화 -> 언마샬링 구조 필요(ObjectMapper), request.getInputStream()

 


📌 Http(Stateless, Connectless) response packaging

 

: HttpServletResponse(응답과 관련된 모든 정보를 가진 객체)활용

1. response Line : 요청 처리 결과를 표현하는 상태코드(status code)
ex) sendError(sc), setStatus(sc)


 ***status code

상태코드 의미
1XX HTTP/1.1에서 유효한 코드로 요청에 대한 조건부 응답 처리 상태 
클라이언트가 서버로 보낸 요청에 문제가 없으니 다음 요청을 이어서 보내도 된다는 것을 의미합니다.
2XX 요청에 대한 처리 성공, 정상 응답 데이터 상태 ex)200
3XX 클라이언트의 요청을 처리하기 위한 추가 동작이 필요함 ex)307,304
4XX 클라이언트 에러 ex)404,400,403,401,405
5XX 서버 에러 ex)500


100~ : ING...webSocket : Http 의 하위 프로토콜 형태로 connectfull구조를 가짐/

                                         Sless, Cless(연결이 수립되면 연결끊어서 과부하방지)
200~ : OK(success)
300~ : 클라이언트 다음 액션에 대한 유도, body 가 없이 line+header 로만 응답이 구성됨

304 : Not Modified / 캐시와연결 / 캐시가 유효하다/ 캐시가 변경된적 없다는 표시
301/302/307 : Moved + Location 헤더와 병용 / 

      301: 영구로 이동, 302,307: 임시로 이동 /

      302: 데이터를 지우고 ..

      307: 이전 요청의 바디의(메소드와 파라미터)를 복사해서 가져온다
     
400~ : client side failure
400 : Bad Request, 요청 데이터 검증에 활용
404 : Not Found, 자원이없다 / 자원이 제공할 수 있는 서비스가 아닐 때
405 : Method Noa Allowed/ do 계열의 callback메소드를 사용하지 않았을 때?

                                         /  서버가 요청 메서드를 알고 있지만 대상 리소스가 이 메서드를 지원하지 않음을 가리킵니다.
401/403 : Authentication(인증)/Authorization(인가) 기반의 접근제어에 활용 /권한 여부를 검증 / 허가된 유저인지 확인
406/415 : 요청이나 응답의 컨텐츠 타입과 관련하여 활용
406 : Not Acceptable - accept request header 에 있는 MIME 컨텐츠를 생성할 수 없음
415 : UnSupported Media Type - request body content 를 해석할 수 없음
500~ : server side failure, 500(Internal server error)


2. response Header : response content 에 대한 meta data, Content- *


ex) setHeader(name, value), setInHeader(name, intValue), setDataHeader(name, longVale)
addHeader(name, value)
  1) response body content에 대한 설정
  2) 캐시 제어를 위한 설정 : Cache-Control
     <a href="cacheControl.jsp">캐시제어</a>

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<h4>응답 헤더를 이용한 캐시 제어</h4>
<pre>
	Pragma(http 1.0), Cache-Control(http 1.1), Expires(all version) // 웹 표준화, 3개 다 사용
	
	Pragma(http 1.0), Cache-Control(http 1.1)
		- public : 양쪽에 다 저장?
		- private : proxy에 저장 x
		- no-cache : 캐싱하지 않는다. 저장된 캐시가 있다면 만료여부를 항상 확인한다.
		- no-store : 캐싱하지 않는다.
		- must-validate : 
		- max-ages : miliseconds
		<%
			response.setHeader("Pragma", "no-cache");
			response.addHeader("Pragma", "no-store");
			response.setHeader("Cache-Control", "no-cache");
			response.addHeader("Cache-Control", "no-store");
			response.setDateHeader("Expires", 0);
			
		%>
		
</pre>
</body>
</html>


  3) auto request : Refresh
     <a href="autoRequest.jsp">auto request</a>

<%@page import="java.time.LocalDateTime"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<meta http-equiv="Refresh" content="5;url=https://www.naver.com">
<!-- Refresh : rock을 걸수 있는 동기에서만 동작 -->
<title>Insert title here</title>
<script type="text/javascript" src="<%=request.getContextPath() %>/resources/js/jquery-3.6.3.min.js"></script>
</head>
<body>
<h4>현재 서버의 시간 : <span id="timeArea"></span></h4>
<h4>주기적인 자동 요청 발생</h4>
<pre>
1. server side : response header(Refresh)<%--  <% response.setIntHeader("Refresh", 1); %> --%>
2. client side :
	- JS : scheduling function(setTimeout, setInterval) 
    <!-- setInterval 간격,주기를 설정 -->
	- HTML : meta

</pre>
<textarea rows="5" cols="100"></textarea>
<script type="text/javascript">
	let timeArea = $('#timeArea');
	setInterval(function(){
		$.ajax({
			url : "<%=request.getContextPath()%>/07/getServerTime.jsp",
			dataType : "html"
		
		}).done(function(resp, textStatus, jqXHR) {
			timeArea.html(resp);
		}).fail(function(jqXHR, status, error) {
			console.log(`상태코드 : \${status}, 에러메시지 : \${error}`);
		});	
	}, 1000);
</script>
</body>
</html>


  4) flow control : Location


3. response Body[Content-Body, Message-Body] : 클라이언트가 요청한 컨텐츠 자체.

 

 

 

 

 

 

 

'웹기반 애플리케이션' 카테고리의 다른 글

Http Response Packaging(2)  (0) 2023.03.10
JSP, Servlet컨테이너의 역할  (0) 2023.03.09
Stream이란?  (0) 2023.03.06
Http Request packaging(2)  (0) 2023.03.03
Http Request packaging(1)  (0) 2023.03.02

+ Recent posts