- 무언가를 요청하는 사람, 서비스 및 데이터를 요청하는 쪽이 클라이언트
- 요청을 전송하고 응답을 기다림
- 정보를 '제공(서브)'한다는 의미로 서버
- 요청을 기다리다 요청이 오면 응답을 보내줌
클라이언트와 서버, 2 개의 노드로 구성된 구조를 2계층 구조라고합니다. 2계층 구조에서 서버는 단지 데이터를 저장하는 역할만 수행하며, 클라이언트가 모든 처리를 담당합니다.
데이터베이스의 교체가 쉽지만, 사용자 간의 메시지를 주고 받아야할 경우 서버는 데이터를 저장하는 역할만 수행하기 떄문에 클라이언트 간에 직접 통신을 해야함
A.클라이언트 계층
B.애플리케이션 계층
C. 데이터 계층
클라이언트가 서버에게 요청할 때 어떻게 요청해야하고 , 그 요청에 대해서 서버가 응답할 때 어떻게 응답해야하는가? 응답에 대한 규칙을 정해놓은 것을 HTTP(통신규약)이라고 합니다.
Stateless(무상태)
- 비연결성으로 인해 서버는 클라이언트를 식별 할 수가 없는데 이를 Stateless라고 함
예를 들면, 쿠팡에서 물건을 살려고하면 사이트에 접속하고, 로그인하고 상품을 클릭하고 로그인하고 주문하고, 로그인하고 결제를 하고... 클라이언트가 누구인지 모르기 때문에 매순간마다 로그인을 일일히 해줘야 합니다.
클라이언트를 식별하기 위해서는 쿠키, 세션, 토큰 등이 있습니다.
start-line
: 해당 요청 또는 응답에 상태를 나타냄, 항상 첫 번째 줄에 위치HTTP headers
: 요청을 지정하거나, 메시지에 포함된 본문을 설명하는 헤더의 집합empty line
: 헤더와 본문을 구성하는 빈 줄이 있음body
: 요청과 관련된 데이터나 응답과 관련된 데이터 또는 문서를 포함HTTP Method
+ Request Target
+ HTTP Version
으로 3부분으로구성예시 : GET /search HTTP / 1.1
형식
- origin 형식 : ? 쿼리 문자열이 붙는 절대 경로, method와 함께 사용
POST / HTTP 1.1 GET / background.png HTTP / 1.0 HEAD / test.html ? query =alibaba HTTP /1,1 OPTIONS / anypage.html HTTP / 1.0
- absoulte 형식 : 완전한 url 형식, 프록시에 연결하는 경우 GET method와 함께 사용
GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1
- authority 형식 : 도메인 이름과 포트 번호로 이루어진 url의 authority component,
HTTP 터널 구축할 경우 , CONNECT 와 함께 사용할 수 있음CONNECT developer.mozilla.org:80 HTTP /1.1
- asterisk 형식 : options와 함께 별표 하나로 서버 전체를 표현
Request headers : fetch를 통해 가져올 리소스나 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더를 의미
General headers : 메시지 전체에 적용되는 헤더, body를 통해 전송되는 데이터와는 상관없음
Reperesentation headers : body에 담긴 리소스의 정보를 포함하는 헤더
HTTP Version
+ Status Code
+ Status Text
로 구성예시
HTTP /1,1 404 NOT Fount.
General headers : 메시지 전체에 적용되는 헤더, body를 통해 전송되는 데이터와 관련이 없음
Response headers : 위치 또는 서버 자체에 대한 정보와 같이 응답에 대한 부가적인 정보를 갖는 헤더, Vary, Accept-Ranges와 같이 상태 줄에 넣기에 공간이 부족했던 추가 정보를 제공
Representation headers : 이전에는 Entity headers로 불렸으며, body에 남긴 리소스 정보를 포함하는 헤더
-모든 응답 본문에 들어가지는 않음
클라이언트가 서버로 요청을 할 때, 어떠한 목적을 갖는 행위인지 HTTP 메서드에 명시