HTTP(Hyper Text Tranfer Protocol)는 WWW상에서 정보를 주고받을 수 있는 프로토콜이다. 주로 HTML 문서를 주고받는다. 클라이언트인 웹 브라우저가 HTTP를 통하여 서버로부터 웹페이지나 그림 정보를 요청하면(리퀘스트), 서버는 이 요청에 응답하여(리스폰스) 필요한 정보를 해당 사용자에게 전달하게 된다. 이렇게 리퀘스트와 리스폰스로 주고받은 정보들을 HTTP메세지
라고 한다. HTTP는 반드시 클라이언트 측에서 서버측으로 리퀘스트를 보내면서 통신이 시작된다. 리퀘스트가 오지 않는 이상 리스폰스를 할 필요가 없는 것이다.
HTTP는 통신을 한번 주고받으면 바로 끊어진다. 과거에 요청했던 리퀘스트, 리스폰스 HTTP메세지를 기억하지 않는 것이다. 이렇게 상태정보를 저장하지 않는 통신 형태를 스테이트리스(Stateless)
라고 한다. HTTP는 대표적인 무상태 프로토콜인데, 이는 많은 데이터를 빠르고 확실하게 처리하는 범위성을 확보하기 위해서 설계된 것이다. 새로운 리퀘스트가 전송될 때 마다 새로운 리스폰스가 생겨나는 형식이다.
그렇다면, 과거의 리퀘스트와 리스폰스 정보가 필요하게 되면 어떻게 될까?
예를 들어 어느 사이트에 로그인을 해놓고 잠시 다른 페이지를 들렀다가 다시 돌아왔을 때, 로그인 정보를 유지되어야 할 때다. 하지만 HTTP/1.1은 상태를 유지하지 않는 프로토콜이다. 그래서 이를 대신하기 위해 도입한 기술이 쿠키(Cookie)
다. 쿠키로 인해 HTTP를 이용한 통신에서도 상태를 계속 관리할 수 있게 되었다.
이제 클라이언트가 서버에게 어떤 식으로 리퀘스트가 담긴 HTTP 메세지를 보내는지 확인해보자.
GET /home.html HTTP/1.1
Host: www.aaa.com
GET : HTTP의 메소드
/home.html : 요구대상인 리소스(리퀘스트 URI)
HTTP/1.1 : 클라이언트 기능을 식별하기 위한 HTTP 버전 번호
= HTTP 서버에 있는 "/home.html" 리소스가 필요하다는 리퀘스트다.
이제 리퀘스트 메세지를 받은 서버의 리스폰스를 보자.
HTTP /1.1 200 OK
Data : 날짜정보 // 헤더필드
Content-Length: 222 // 헤더필드
Content-Type: text/html // 헤더필드
<html>
// 바디
...
HTTP 1.1 : 서버의 HTTP 버전
200 OK : 리퀘스트의 처리 결과를 나타내는 상태코드와 설명
Data : 리스폰스가 발생한 일시(헤더필드)
**빈 줄로 헤더와 바디를 구분한다.