- 프로토콜 이란?
통신 프로토콜 또는 통신 규약은 컴퓨터나 원거리 통신 장비 사이에서 메시지를 주고 받는 양식과 규칙의 체계이다.
통신 프로토콜은 신호 체계, 인증, 그리고 오류 감지 및 수정 기능을 포함할 수 있다.
HTTP(HyperText Transfer Protocol, 하이퍼본문전송규약)는 WWW 상에서 정보를 주고받을 수 있는 프로토콜이다. 주로 HTML 문서를 주고받는 데에 쓰인다. TCP와 UDP를 사용하며, 80번 포트를 사용한다. 1996년 버전 1.0, 그리고 1999년 1.1이 각각 발표되었다.
HTTP는 클라이언트와 서버 사이에 이루어지는 요청/응답(request/response) 프로토콜이다. 예를 들면, 클라이언트인 웹 브라우저가 HTTP를 통하여 서버로부터 웹페이지나 그림 정보를 요청하면, 서버는 이 요청에 응답하여 필요한 정보를 해당 사용자에게 전달하게 된다. 이 정보가 모니터와 같은 출력 장치를 통해 사용자에게 나타나는 것이다.
요청을 할 때에는 URI (Unified Resource Identifier) 으로 요청을 한다
HTTP를 통해 전달되는 자료는 http:로 시작하는 URL(인터넷 주소)로 조회할 수 있다.
메세지 포맷은 요청 라인 또는 응답 라인, 헤더, 바디로 구성되어 있다.
응답을 한 이후에는 연결이 끊어지기 때문에 비상태 프로토콜이라고 하는데, HTTP 1.1버전부터 일정한 시간(초단위)동안 같은 클라이언트를 대상으로 연결을 유지시켜주는 Kepp-alive가 가능합니다. 이는 현재의 css, js, 이미지 등이 많이 포함된 홈페이지를 요청하고 응답할때 유리하다
-
HTTP의 특징
-
HTTP 메시지는 HTTP 서버와 HTTP 클라이언트에 의해서 해석이 된다.
-
TCP/IP를 이용하는 응용 프로토콜(application protocol)이다.
-
HTTP는 연결 상태를 유지하지 않는 비연결성 프로토콜입니다. (이러한 단점을 해결하기 위해 Cookie와 Seesion)
-
HTTP는 연결을 유지하지 않는 프로토콜이기 떄문에 요청/응답(request/response) 방식으로 동작한다.
-
-
https
HTTPS는 소켓 통신에서 일반 텍스트를 이용하는 대신에, SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화한다.
HTTPS의 기본 TCP/IP 포트는 443이다.
- 메소드
HEAD - GET과 같은 요청이지만, 자료에 대한 정보(meta-information)만을 받는다.
GET - URL에 해당하는 자료의 전송을 요청한다.
POST - 서버가 처리할 수 있는 자료를 보낸다.
PUT - 해당 URL에 자료를 저장한다.
DELETE - 해당 URL의 자료를 삭제한다.
TRACE - 이전에 요청한 내용을 들을 것을 요청한다.
OPTIONS - 서버가 특정 URL에 대해 어떠한 HTTP Method를 지원하는지 묻는다.
CONNECT - 프록시가 사용하는 요청.
(참고:위키백과, http://dalkomit.tistory.com/134 )
- TCP
TCP는 Trasmission의 약자입니다
데이터의 송수신을 위해 IP를 사용하는 프로토콜이며, TCP는 UDP의 비해서 복잡하지만 신뢰성이 높기 때문에 대부분 이 프로토콜을 사용한다고 보시면 됩니다.
TCP는 IP가 처리할 수 있도록 데이터를 여러 개의 패킷으로 나누고 도착지에서는 완전전한 데이터로 패킷들을 재조립 해야한다.
세그먼트에 순서를 부여하여 전송, 수신하여 순서가 뒤바뀌는 일이 없도록 하고 있으며 패킷이 왔다갔다하며 순번이 뒤바뀌는 경우에도 복구하여 상위층이 신뢰할수 있는 연결방식을 제공한다.
- UDP
UDP는 User Datagram Protocol의 약자입니다.
TCP와는 다르게 데이터를 패킷으로 나누고 반대편에서 재조립하는 과정을 거치지 않으며 수신지에서 제대로 받던 받지 않던 상관안하고 데이터를 보내기만 한다.
또 목적지에 도달하려고 하지만 (Best-effort) 에러가 날 수도 있고 재전송이나, 순서 뒤바뀜에 대한 대체는 어플리케이션에서 처리해 주어야 한다.
하지만 속도가 빠르다.
UDP는 TCP와 다르게 비연결성을 가지며 수신측이 제대로 도착하였는지 확인 여부를 보장하지 않는 비신뢰성 서비스 입니다 사용자 데이터를 데이터그램에 포함해 전송한다.
- HTTP 사이클
1) 브라우저는 www.naver.com 에 접속한다.
(http://www.naver.com:80/) - 80번포트를 통해 사용된다.
2) 브라우저는 요청정보를 naver서버에 보낸다.
(주소창에서 주소를 입력, 링크를 클릭하여 요청하는 방식은 GET 방식이라고 한다.
보통 FORM 에서 값을 입력하여 전송하는 방식은 POST방식이라고 한다.)
1~1024 잘 알려진 포트 (well-known 포트) 중복 시 충돌.
/로 구분된다.
GET / http버전 - 요청라인 (브라우저가 서버한테 한줄씩)
헤더이름:헤더값
…
…
빈줄
(바디) - GET 방식은 Body에 아무것도 전송하지 않는다. 빈줄 나오고 끝
ex)
메소드 패쓰 (패쓰는 localhost:9000/패쓰 를 적어 요청했을때만 /패쓰가 나오고 그냥 :9000 일땐 /가 요청된다)
GET /index.htm HTTP/1.1 - 요청라인
Host: ~~.com - 호스트 헤더값
- 공백 -
3) 서버는 요청라인을 읽어들여 어떤 자언을 원하는지 판단한다.
/ 에 해당하는 자원을 서버에게 전달한다. 이 전달하는걸 응답한다.
상태코드 상태코드문자열
헤더이름:헤더값
…
빈줄
내용
ex)
HTTP/1.1 200 OK
<헤더> World!
4) 내용 보낸 후 브라우저와 서버의 연결이 끊어진다. 헤더>