-
HTTP 프로토콜의 이해Servlet 2019. 2. 20. 07:52
HTTP 프로토콜의 이해
HTTP란 TCP/IP 4계층에서 애플리케이션 계층에 해당하는 프로토콜로서
전송계층(Transport Layer)에서 TCP를 사용하여 웹브라우저와 웹서버 간에 통신하는 프로토콜
HTTP의 특징
1. 무연결
일반적으로 클라이언트가 서버와 통신을 하려면 연결을 유지한 상태에서 통신해야함
HTTP는 연결을 유지하지 않은 상태에서 데이터를 주고 받을 수있다.
HTTP는 클라이언트가 요청이 들어와서 서버가 응답하면 클라이언트와의 서버의 연결을 끊고
클라이언트가 새로요청하면 또 다른 연결을 맺는다.
이때의 연결은 이전과 아무 상관이 없는 새로운 연결이다.
즉 HTTP는 클라이언트와 서버간에 요청이 있을 때마다 독립적으로 연결하여 통신하는 방식 .
클라이언트와 서버의 요청 단위로 새로운 연결을 처리해야하는 단점이 있다.
2. 무상태
요청이 있을때마다 독립적인 트랜잭션으로 취급하기 때문에 이전 연결에서 작업내용을
다음 요청에서 그대로 사용할 수가없다. 이처럼 다른연결로 상태가 유지되지 않는 특성을
무상태라고 한다.
그래서 사용한 다른 요청에서 계속사용하고 싶다면 서버나 클라이언트 측에 정보를 저장해두고 계속 상태
정보를 유지 한 후에 사용하는 것으로 정보 유지 기술이 필요함
요청/응답(Request,Response)
클라이언트가 서비스를 요청하면 서버는 요청 정보를 받고 요청을 처리한 후 응답하므로서 서비스가
완료되는 방식
HTTP 요청 정보
HTTP 요청정보는 웹클라이언트가 웹서버에 서비스를 요청하면
HTTP에 의하여 자동으로 만들어저 서비스를 요청받은 웹서버에 전달죈다.
서비스 요청시 요청정보는 다음과 같은 구조로 되어있다.
헤더 ----------------------------------------------------------------
요청방식 URI HTTP버전 GET /edu/index.html HTTP/1.1
name : content
몸체-------------------------------------------------------------------
요청정보는 크게 헤더와 몸통으로 구성
헤더 가장 첫줄은
Request-Line으로 3개의 정보가 들어간다.
1. 요청방식
2. 요청한 페이지의 URI
3. HTTP 버전정보
이후 공백 삽입되면 다음줄부터 헤더 정보가 들어감
헤더 정보는
name : content 형식 정보가 들어감
서비스 처리를 위한 웹클라이언트와 웹서버간의 공유할 정보
몸체에는 데이터의 몸체
1)HTTP 요청방식
-GET,POST,PUT,DELETE
GET
-하이퍼링크가 포함된 개체나 직점 URL을 입력할때
서버로 요청하는 문자열이 있응ㄹ때 URI뒤에 ?기호와 함께 주가되어 전달됨
-서버로 보내는 모든 문자열이 노출되고 , 헤더에 포함되므로 문자열에 크기가 제한이있다.
단순한 요청방식 서버에 빠르게 요청할때 사용하는
POST
HTTP에 몸체에 포함되서 전달됨 .
데이터 크기에 제한이 없다.
화면에 노출안됨
클라이언트측에서 데이터를 인코딩 하고 서버측에 디코딩하므로 처리속도가 느림
POST 방식은 주로 서버측의 정보를 새로 생성하는 작업에 사용함
PUT
파일 업로드시 이용가능 ,
POST와 PUT 방식 모두 같은 작업이 수행가능함
일반적으로 서버의 리소스를 새로 생성할때 POST방식으로 요청하고
서버의 리소스를 수정할때PUT 방식으로 구분하여 요청한다.
DELETE
서버의 리소스를 삭제하는 작업을 요청할때 사용하는 방식으로
2) 요청 URI
요청 URI는 웹 클라이언트가 웹서버에 요청한 서비스 문서의 정보이다.
요청 URI는 네트워크 정보인 URL(Uniform Resource Locator)은 네트워크상에
존재하는 자원을 찾아하기 위한 정보 ,URL은 다음과 같은 형식을 표현한다.
형식
--------------------------------------------
프로토콜 서버주소 포트번호 서버자원정보(Request-URI)
----------------------------------------------
프로토콜(protocol)
프로토콜은 서버와 통신하기 위한 규약으로서 서버마다 사용하는 프로토콜이 정해져있다.
웹서버는 URL에 HTTP://로 표현하며 오라클 DBMS 는 jdbc:oracle:thin:@으로 표현
서버주소
네트워크 상에서 연결된 컴퓨터가 찾아가기 위한 정보로서 IP 주소 또는 도메인 이름으로 표현한다.
서버가 동작하고 있는 컴퓨터 정보
포트번호
URL에서 서버주소를 이용해서 컴퓨터를 찾았다면
포트 번호는 컴퓨터에서 동작하고 있는 서버로 접속하기 위한정보
URI
URI(Uniform Resource Identifier)
서버에서 서비스하는 서버의 자원정보
URL에서 포트정보 다음부터가 URI이다.
예시)http://www.mysite:80/edue/index.html
먼저 www.mysite.com 이용해 컴퓨터를 찾아오고
다음정보인 80을 이용해 서버를 찾아온다.
80이후 에 URI정보를 통해 웹서버에서 클라이언트가
요청한 문서를 찾아 실행한수의 결과 또는 그 파일자체를 클라이언트에게 응답
3) 헤더
요청정보 헤더
Accept
-클라이언트가 인식하여 처리할수있는 파일타입을 명시
예) text/html , apllication/xhtml+xml
Accept Encoding
-클라이언트가 받아들일 수있는 인코딩타입 , 인코딩형태를 지정하지않으면 어떤형태도 안받어들여짐
예) compress, gzip
Accept Language
-클라이언트가 지원하는 언어
예) ko-KR
User-Agent
클라이언트가 사용하는 웹브라우저에 대한 정보를 보여준다.
서버 쪽에서는 User-Agent 정보를 보고 일반웹과 모바일을 분기해준다
Cache-Control
HTTP 캐시는 클라이언트가 서버에 요창하여 응답받은 서비스 결과를 클라이언트 쪽에 저장했다가
사용자로 부터 같은 서비스 요청이 들어오면 이전에 저장된 처리 결과를 보여주는것을 말한다.
no-chache: 캐시안함
no-store : 신속히 넘긴 후 정보제거
max-age = seconds: 지정된 시간보다 오래도니 데이터는 캐시안함
max-stale = seconds : 지정된시간 이후 아직되지 않은 만료된데이터를보냄
min-fresh = seconds : 지정된시간 이후 변경된 새로운 데이터만 보냄
only-if-chached : 새로운 데이터를 검색하지 않고 캐시에 잇는 데이터만 반환
HTTP 응답정보
웹서버에서 서버로 보내지는 응답메세지 구조는 다음과같다.
상태줄 -------------------------------------------------
HTTP버전 Status-Code Reason-Phrase HTTP/1.1 200 OK
헤더
메시지 몸체-------------------------------------------------------------------
1) 상태코드
클라이언트 요청에 대한 처리결과를 의미
200 OK-요청을 성공적으로 처리
400 Bad Request - 클라이언트요청에 문법적이 요류등 서버가 요청을 해석실패
401 - 인증오류
403 - 인증정보에 상관없이 페이지의 접근을 제한
404 - 클라이언트가 요청한 문서가 존재하지 않음을 의미
405 - 클라이언트의 요청방식이 웹서버에서 지원하지 않음
500 - 서버프로그램 실행오류 -서버프그램내에서의 구현의 오류
2) 헤더
클라이언트의 요청에 대한 실행결과를 웹클라이언트가 올바르게 처리할 수있게 하기위한 정보들로 구성
Cache-Control
응답 결과를 캐시에 저장할지에 관한 내용을 나타낸다.
Connection
연결을 위해 지정하는 정보로 close 연결은 클라이언트나 서버 둘중 하나가 연결을 해제하기 원한다는 것을 알림
Content-Encoding
메세지를 전송할때 사용할 인코딩 체계를 지정한다.
COntent-type
클라이언트가 요청한 메시지의 데이터 포맷으로서 서버도 같은 데이터 타입으로 처리하여 응답하여야한다.
Date
웹서버가 클라이언트에 응답한 날짜와 시간을 표시한다.
Server
클라이언트의 서비스를 요청받아서 서비스를 처리한 서버의 이름과 버전 정보를 나타낸다.
'Servlet' 카테고리의 다른 글
서블릿 디렉터리를 WEB-INF/classes 로지정하는 이유 (0) 2019.02.21 요청정보와 응답정보 (0) 2019.02.20 서블릿 구현및 실행 (0) 2019.02.20 개발환경 구축 (0) 2019.02.20 자바와 웹 (0) 2019.02.20