hyperText Transfer Protocol
문서간에 링크를 통해서 연결할 수 있는 ,
이미지, 영상, 음성, 파일,
json, xml, 거의 모든 형태의 데이터를 전송 가능
서버간에 데이터를 주고 받을 때도 대부분 http를 사용한다.
현재 가장 많이 사용하는 버전은 1.1 버전이다.
1.2,1.3은 성능 개선을 위주로 버전 업 되었다.
TCP: http1.1/http1.2 는 tcp 프로토콜 위에서 동작한다. (현재 제일 많이 사용)
UDP : http1.3은 UDP 위에서 동작한다.
Request Response 구조
클라이언트는 서버에 요청을 보내고, 응답을 대기한다.
서버가 요청에 대한 결과를 만들어서 응답한다.
클라이언트와 서버를 개념적으로 분리하고,
비지니스 로직과, 데이터는 서버가 담당
클라이언트는 UI ,사용성에 집중한다.
이렇게 하면 양쪽이 독립적으로 진행 할 수 있다.
어떻게 대용량 트레픽으로 진화할지?
스테이리스(stateless)
즉 문맥을 이어가는 것이다.
수진 : 맥 프로 2020 얼마에요?
점원 : ssd 제일 높은걸로 하시면 320만원 입니다.
수진 : 2개 주세요.
점원 : 640만원 결제 도와드리겠습니다 신용카드? 현금?
수진 : 신용카드로 할게요.
점원 : 구매 완료 되셨습니다.
점원이 중간에 바뀌어도, 수진이 할 일을 계속 할 수 있으려면,
결제에 필요한 정보를 전부 전달해야한다.
수진 : 맥 프로 2020 얼마에요?
점원1 : ssd 제일 높은걸로 하시면 320만원 입니다.
수진 : 맥 ssd 제일 높은걸 2개 주세요.
점원2 : 640만원 결제 도와드리겠습니다~
수진 : 맥 ssd 제일 높은걸 2개를 신용카드로 구매하겠습니다.
점원3 : 완료 되셨습니다.
상태 유지 stateful 와 무상태 stateless 차이
중간에 점원이 바뀌면 상태 유지를 하는 경우 처음부터 다시해야한다.
무상태일 경우 중간에 점원이 바뀌어도 된디. 갑자기 클라이언트 요청이 증가해도
서버를 확장하기 쉽다.(무한 서버 증설 가능을 스케일 아웃이라고 한다.)
클라이언트에 요청되는 데이터가 너무 많다.
일반적으로 tcp/ip는 연결을 유지한다.
요청을 보내고, 응답을 받으면서 연결을 유지한다.
서버가 세 개의 클라이언트랑 연결이 되어 있음에도 한가지 일만 해야한다.
http는 기본적으로 연결을 유지하지 않는 모델이다.
일반적으로 초 단위의 이하의 빠른 속도로 응답한다.
1시간동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작다.
예) 웹 브라우저에서 계속 연속해서 검색 버튼을 누르지는 않는다.
따라서 서버 자원을 매우 효율적으로 사용할 수 있다.
서버에게 요청한 작업을 끝내고 바로 연결을 끊어버리게 되면 연결할 때
소요되는 3way handshake 시간이 추가된다.
웹 브라우저로 사이트를 요청하면 html 뿐만 아니라 css, 추가 이미지 등 수 많은 자원이 함께 다운로드
된다.
지금은 http 지속 연결 문제로 해결했다.
start line 은 크게 request-line
method/ target/ version
종류 : get, post, put, delete
서버가 수행해야하는 동작을 지정해준다.
get : 리소스 조회,
post : 요청 내역 처리
absolute -path 절대경로[?쿼리]
절대 경로는 /로 시작하는 것들이다.
start-line 은 / status-line
status-line 은 HTTP-ver 띄고 status-code 띄고 reason-phrase CRLF
필드 이름이랑 : 랑 붙이기
Content-Type:text/html;charset=UTF-8
실제 전송할 데이터가 담겨 있음
html문서라던가, 이미지, 영상, 등등 바이트로 표현할 수 있는 모든 데이터를
전송할 수 있다!