자바 웹 개발 워크북 읽으면서 정리
제2장 웹 프로그래밍 기초 다지기
웹 애플리케이션은 웹을 기반으로 구동되기 때문에 웹 프로그래밍을 하려면 웹 브라우저와 웹 서버 간의 통신 프로토콜을 이해하는 것이 필수입니다. 이 프로토콜을 HTTP(Hyper-TextTransfer Protocol)이라고 부릅니다.
2.1 HTTP 프로토콜의 이해
HTTP 프로토콜은 웹 브라우저와 웹 서버 사이의 데이터 통신 규칙입니다. 우리가 웹 페이지의 링크를 클릭하면 웹 브라우저는 HTTP 요청 형식에 따라 웹 서버에 데이터를 보냅니다.(해당 파일, 이미지 등등) HTTP 프로토콜은 단순히 HTML 페이지나 이미지 파일을 전송하는 차원을 넘어서 원격 컴퓨터에 로딩되어 있는 함수나 객체의 메서드를 호출할 때도 사용됩니다.
2.1.1 HTTP 모니터링
웹 브라우저와 웹 서버 사이에 주고받는 데이터를 들여다보려면 HTTP 프록시 프로그램이 필요합니다.
웹 브라우저가 웹 서버에게 요청을 하면 HTTP 프록시가 그 요청을 대신 받아서 서버에 전달합니다. 서버에서 응답이 오면 HTTP 프록시가 그 응답을 대신 받아서 웹 브라우저에게 전달합니다.
프록시서버: 빠른 전송을 위하여 서버의 응답 결과를 캐시에 저장해 두는 것
2.1.4 HTTP 프록시 실행
상태코드 |
상태설명 |
200 |
요청이 성공적으로 처리되었다. |
301 |
요청한 자원이 이동되었다. 헤더 정보에 이동 위치를 알려줄 테니 다시 요청하라. |
304 |
클라이언트가 임시 보관한 응답결과와 다르지 않다. |
400 |
잘못된 요청이다. |
404 |
요청한 자원을 못 찾았다. 서버 내부에서 오류가 발생하였다. |
500 |
2.1.5 HTTP 클라이언트 만들기
첫 라인은 응답 상태정보, 두번째 라인부터 공백라인까지는 헤더들, 공백 라인 다음에는 HTML로 된 본문 데이터가 옵니다. 이렇게 통신 규약에 맞추어 데이터를 보내고 받는다면 누구든지 해당 프로토콜의 클라이언트나 서버를 만들 수 있습니다.
2.2 GET 요청
2.2.2 GET 요청 1 – 웹 브라우저 주소창에 URL을 입력하는 경우
웹 브라우저 주소창에 URL을 입력하여 서버의 자원을 요청하는 경우 GET 요청이 발생합니다.
2.2.3 GET 요청 2 – 링크를 클릭하는 경우
브라우저 화면에서 ‘구글’이나 ‘페이스북’ 링크를 클릭합니다.
HTML의 <a> 태그는 GET 요청을 만듭니다.
2.2.4 GET 요청 3 – 입력 폼의 method 속성값이 get인 경우
입력 폼의 method 속성값이 ‘get’인 경우, 서버에 GET 요청을 보냅니다.
2.2.5 GET 요청의 데이터 전달 형식
‘?’ 문자는 서비스 주소와 데이터를 구별하는 구분자이며 ‘&’문자는 데이터들을 구별하는 구문자이고 ‘=’ 문자는 매개변수 이름과 값을 구별하는 구분자입니다.
서비스주소 ? v1 = 23 & v2 = 15
2.3 POST 요청
POST 요청의 특징
Ø URL 데이터가 포함되지 않음 -> 외부 노출 방지
Ø 메시지본문에 데이터 포함 -> 실행 결과 공유 불가
Ø 바이너리 및 대용량 데이터 전송 가능
2.5 정리
HTTP 프로토콜에서 가장 많이 사용되는 요청 형식은 GET과 POST입니다. GET 요청은 브라우저의 주소창에 직접 URL을 입력하거나 사용자가 링크를 클릭하는 경우에 발생하고, 때론 구글 검색처럼 입력 폼을 통해서 GET 요청을 수행할 수 있습니다.
그러나 사용자가 입력한 데이터가 주소창에 그대로 노출되기 때문에 로그인이나 결제정보를 서버에 보낼 때는 GET 형식으로 보내서는 안됩니다. 대신 POST 형식으로 요청을 보내야 합니다. POST 형식은 웹 서버에 데이터를 보낼 때 메시지 본문 부분에 붙여서 보내기 때문에 주소창에 노출될 위험이 없습니다. 또한, 보내는 데이터의 크기에 제한이 없습니다.
웹 서버에 파일을 첨부하여 보낼 경우에는 멀티 파트 인코딩이라는 아주 특별한 형식을 사용해야 합니다. 그래야만 다른 데이터와 구분할 수 있습니다.
'JAVA > spring' 카테고리의 다른 글
Servlet JDBC (1) | 2020.01.20 |
---|---|
Servlet Programming (0) | 2020.01.09 |
Web Applications (0) | 2020.01.02 |
spring war Deployment (0) | 2019.09.18 |
github sts(eclipse) (0) | 2019.09.11 |
댓글