<수업필기>
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<String,String[]> getParameterMap(),
String[] getParameterValues(name), Enumeration<String> 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 |