클라이언트는 사용자와 상호작용을 하는 브라우저 또는 앱을 말하며, 서버는 클라이언트에서 필요한 데이터(리소스)를 전달해주는 역할을 한다. 사용자가 브라우저를 통해 상호작용 하는 것이 클라이언트와 서버가 서로 통신하는 것으로 볼 수 있는 셈이다.
인터넷 연결 없이 쇼핑몰 앱을 켰다고 가정해보자. 누구나 알 수 있듯 쇼핑몰 앱은 정상적으로 동작할 수 없다. 상품 정보를 서버로부터 받아오기 때문이다. 인터넷을 연결하고, 목도리를 사고 싶어서 쇼핑몰 앱에서 목도리 제품을 검색한다. 그럼 클라이언트는 서버로 목도리 정보를 요청하고, 서버로부터 응답 받은 데이터를 사용자에게 보여준다. 그뿐만이 아니라 새로운 데이터를 저장하거나 기본 데이터를 수정 또는 삭제 할 때도 서버로 요청하고 응답을 받는다.
그렇다면 클라이언트는 어떻게 서버로 요청을 하는걸까?
클라이언트와 서버 간의 통신을 알아보려면, 먼저 프로토콜이라는 개념을 이해해야 한다. 손님이 주문을 받는 사람에게 대뜸 찾아가, 외계어로 주문을 할 수 없듯, 주문을 하기 위해서는 꼭 지켜야 하는 약속이 몇가지 존재한다. 클라이언트와 서버가 서로 HTTP라는 프로토콜을 이용해서 서로 대화를 나눈다. 이는 "HTTP 메시지"라고 부른다.
인터넷상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜이다. HTTP로 보낼 수 있는 데이터는 HTML문서, 이미지, 동영상, 오디오, 텍스트 문서 등 여러종류가 있다. 하이퍼텍스트 기반으로(Hypertext) 데이터를 전송한다. 링크기반으로 데이터에 접속하겠다는 의미이다.
HTTP messages 는 클라이언트와 서버 사이에서 데이터가 교환되는 방식이다. HTTP messages에는 두 가지 유형이 있다.
Head의 첫째줄로써 요청줄(HTTP 요청은 클라이언트가 서버에 보내는 메시지)을 나타낸다.
요청 헤더로써 이름, 값 쌍으로 표시된다. 어떤 프로토콜을 이해하려면 프로토콜의 헤더를 알면 된다. 특정 프로토콜의 헤더의 내용은 특정 프로토콜의 기능을 제공하기 위해 담고 있는 최소한의 정보기 때문이다. 헤더에 그 프로토콜에 불필요한 내용을 담으면 네트워크로 전송되는 데이터의 크기가 커져서 빠른 전송이 불가능하기 때문에 프로토콜을 설계할 때부터 꼭 필요한 내용만 담아야 하고, 모든 기능이 표현되어야 한다.
본문 요청에 대한 다른 정보를 추가할 수 있다.
클라이언트가 요청한 데이터를 포함한다.