HTTP : Hyper Text Transper Protocol
WWW상에서 HTML파일을 주고받을 수 있는 프로토콜이다.
HTTP프로톸톨은 일반적으로 tcp/ip 통신 위에서 동작하며 기본포트는 80번이다.
웹은 기본적으로 HTTP로 통신하기 때문에 웹 개발자라면 필수 덕목이라고 할 수 있겠다.
http는 프로토콜인 만큼 규약이 정해져있다.
HTTP 통신은 요청과 응답을 통해서 이루어 진다.
클라이언트는 서버에게 요청을 보내고, 서버는 요청을 보낸 클라이언트에게 필요한 응답을 보낸다.
HTTP의 특징 중 또 하나의 중요한 요소이다.
각각의 HTTP 통신은 데이터를 주고 받기위한 각가의 데이터 요청이 서로 독립적으로 관리가 된다.
덕분에 서버는 세션과 같은 별도의 추가 정보를 관리할 필요가 없어지며, 수많은 요청을 처리하느라 서버에 걸리는 부하에 대해 걱정을 더는 성능 상의 이점을 얻을 수 있다.
또한 독립적이기 때문에 과거의 요청 혹은 응답에 대해선 알 수 없다.
이 때문에 오가는 통신마다 필요한 모든 정보를 담아 요청해야 한다.
위에 서술한 것 처럼 HTTP는 요청과 응답으로 이루어져 있다고 했다. 그럼 요청메세지와 응답메세지는 각각 어떻게 구성되어 있을까?
GET /main/login HTTP1.1
Host: sanha.com
Connection: keep-alive
{
"user_email": "example@gmail.com"
"user_password": "sanha"
}
요청은 크게 세부분을 이루어져 있다.
첫번째 줄은 Starter line으로 어떠한 요청을 하는지를 담고 있다.
HTTP의 요청 메소드에는 GET
, POST
, PUT
, DELETE
등이 있다.
*** 대표적인 요청 메소드
GET : 서버에게 데이터 요청
POST : 클라이언트에서 데이터를 서버에게 보냄 (데이터의 생성, 수정, 삭제에 사용)
PUT : 서버에게 데이터 생성 요청
DELETE : 서버에게 데이터를 삭제 요청
두번째 부분은 header이며 요청에 대한 추가 정보를 담고 있다.
JSON과 비슷하게 Key:Value 형태로 이루어져 있다.
세번째 부분은 body이며 데이터가 담겨있는 부분이다.
예를 들어 로그인을 할 때, 유저의 아이디와 패스워드를 담아 보내는 부분이라고 생각하면 된다.
보낼 필요가 없는 경우에는 생략될 수도 있다.
응답도 요청과 마찬가지로 세부분으로 이루어져 있다.
첫번째 줄은 Starter line으로 어떠한 응답을 하는지를 담고 있다.
예를 들어 HTTP/1.1 200 SUCCESS
인 경우, 'HTTP1.1버전으로 응답했고 요청에 대해 성공적으로 응답하여 200 상태 코드를 보낸다'라는 뜻이다.
두번째 부분은 header이며 요청과 마찬가지로 응답에 대한 추가 정보를 담고 있다.
JSON과 비슷하게 Key:Value 형태로 이루어져 있다.
세번째 부분은 body이며 데이터가 담겨있는 부분이다.
일반적으로 요청의 body와 동일하며 생략될 수도 있다.
JSON의 형태로 전달되는 경우가 많다.