클라이언트란 요청을 보내는 쪽을 의미하며 브라우저
서버란 요청을 받는 쪽의 의미하며 데이터를 보내주는 원격지의 컴퓨터
크게 2가지 통신 방식이 있다.

Hypertext Transfer Protocol
웹 서버와 웹 브라우저가 통신하기 위해 주로 사용되는 통신 프로토콜.
프로토콜이란 네트워크에서 데이터를 송수신하기 위한 양식과 규칙.
초기에는 HTML 파일을 전송하려는 목적으로 만들어졌으나 현재는 JSON, Image 파일 등 다양한 파일을 전송받을 수 있다.

단방향 통신 : 클라이언트가 요청을 보내는 경우에만 서버가 응답하는 단방향 통신이다.
비연결성 (Connection) : 서버로부터 응답을 받은 후 연결이 바로 종료되어 연결상태를 유지하지 않는다.
무상태 (Stateless) : 연결상태를 유지하지 않는다 = 서버는 응답 메시지를 반환한 후 클라이언트의 상태를 저장하지 않는다.
상태를 기억하기 위해서 쿠키와 세션이 등장했다.
- 쿠키 : 브라우저단에서 쿠키를 저장. 브라우저에 저장되므로 위변조가 쉬워 보안이 취약하다.
- 세션 : 서버단에서 사용자 정보를 저장. 쿠키보다는 안전할 수 있지만 중간에 탈취당할 수 있으므로 보안상의 위험이 여전히 존재하며 서버의 메모리를 차지하여 동시 접속자가 많을 경우 서버 과부하의 원인이 된다.
URL은 서버에 리소스를 요청하기 위해 입력하는 영문 주소로 이를 통해서 서버에 특정 데이터를 요청할 수 있다.

HTTP 메시지는 서버와 클라이언트 간에 데이터가 교환되는 방식으로,
설정파일, API 혹은 다른 기타 인터페이스에 의해 가공되어 제공된다.
HTTP 요청 메시지 (HTTP Request Message) 는 공백을 제외하고 3가지 부분으로 나누어진다.

Start Line
요청 메시지의 시작라인으로 요청라인 혹은 상태라인이라고도 한다.
HTTP 메서드 (요청 목적) , Request tartget (HTTP 요청이 전송되는 목표 주소), HTTP version으로 구성.
GET /test.html HTTP/1.1
[HTTP Method] [Request target] [HTTP version]
Header
해당 요청에 대한 추가 정보를 담는 부분으로 key: value 형태로 이루어져있다.
생략이 가능하다.
Host: google.com
Accept: text/html
Accept-Encoding: gzip, deflate
Connection: keep-alive
Body
HTTP Request가 전송하는 데이터를 담고있는 부분.
전송하는 데이터가 없다면 body 부분은 비워져 있다.
보통 post 요청일 경우 HTML 폼 데이터가 포함되어 있다.
클라이언트가 서버로 요청할 때, 어떠한 목적의 요청인지 HTTP 메서드에 명시한다.
기타 메서드
- HEAD : GET과 동일하지만 상태줄과 헤더만 반환.
- OPTIONS : 대상 리소스에 대한 통신 가능 옵션을 설명.
- CONNECTION : 대상 리소스로 식별되는 서버에 대한 터널을 설정.
서버에서 응답으로 HTTP 상태 코드를 보내준다.
상태 코드는 크게 2가지로 200(성공) 과 404(실패) 이다.
200번대 상태코드는 대부분 성공을 의미한다.
300번대 상태코드는 대부분 클라이언트가 이전 주소로 데이터를 요청하여 서버에서 새 URP로 리다이렉트를 유도하는 경우이다.
400번대 상태코드는 대부분 클라이언트의 코드가 잘못된 경우이다.
500번대 상태코드는 서버 쪽에서 오류가 난 경우이다.

서버와 클라이언트가 특정 Port를 통해 실시간으로 양방향 통신을 하는 방식.
HTTP는 단방향 통신이기 때문에 서버가 클라이언트에게 메세지를 보낼 수 없다.
실시간 채팅 기능을 구현하렴변 서버도 클라이언트에게 요청을 보낼 수 있는 소켓통신이 필요하다.
소켓이란 두 프로그램이 서로 데이터를 주고 받을 수 있도록 양 쪽에 생성되는 통신 단자.