HTTP

hyperText Transfer Protocol
문서간에 링크를 통해서 연결할 수 있는 ,

이미지, 영상, 음성, 파일,
json, xml, 거의 모든 형태의 데이터를 전송 가능
서버간에 데이터를 주고 받을 때도 대부분 http를 사용한다.

현재 가장 많이 사용하는 버전은 1.1 버전이다.
1.2,1.3은 성능 개선을 위주로 버전 업 되었다.

기반 프로토콜

TCP: http1.1/http1.2 는 tcp 프로토콜 위에서 동작한다. (현재 제일 많이 사용)
UDP : http1.3은 UDP 위에서 동작한다.

http 특징

  • 클라이언트 서버 구조
  • 무상태 프로토콜(스테이리스), 비연결성
  • http 메세지
  • 단순함, 확장 가능

클라이언트 서버 구조

Request Response 구조
클라이언트는 서버에 요청을 보내고, 응답을 대기한다.
서버가 요청에 대한 결과를 만들어서 응답한다.

클라이언트와 서버를 개념적으로 분리하고, 
비지니스 로직과, 데이터는 서버가 담당
클라이언트는 UI ,사용성에 집중한다. 
이렇게 하면 양쪽이 독립적으로 진행 할 수 있다.
어떻게 대용량 트레픽으로 진화할지? 

무상태 프로토콜

스테이리스(stateless)

  • 서버가 클라이언트의 상태를 보존하지 않는다.
  • 서버 확장성이 높으니, 클라이언트가 추가로 데이터를 전송해줘야한다.

상태 유지 stateful 예제

즉 문맥을 이어가는 것이다.

수진 : 맥 프로 2020 얼마에요?
점원 : ssd 제일 높은걸로 하시면 320만원 입니다.

수진 : 2개 주세요.
점원 : 640만원 결제 도와드리겠습니다 신용카드? 현금? 

수진 : 신용카드로 할게요.
점원 : 구매 완료 되셨습니다. 

무상태 stateless 예제


점원이 중간에 바뀌어도, 수진이 할 일을 계속 할 수 있으려면,
결제에 필요한 정보를 전부 전달해야한다.

수진 : 맥 프로 2020 얼마에요?
점원1 : ssd 제일 높은걸로 하시면 320만원 입니다.

수진 : 맥 ssd 제일 높은걸 2개 주세요.
점원2 : 640만원 결제 도와드리겠습니다~ 

수진 : 맥 ssd 제일 높은걸 2개를 신용카드로 구매하겠습니다.
점원3 : 완료 되셨습니다. 

상태 유지 stateful 와 무상태 stateless 차이

중간에 점원이 바뀌면 상태 유지를 하는 경우 처음부터 다시해야한다. 
무상태일 경우 중간에 점원이 바뀌어도 된디. 갑자기 클라이언트 요청이 증가해도 
서버를 확장하기 쉽다.(무한 서버 증설 가능을 스케일 아웃이라고 한다.)

stateless 실무 한계

  • 모든 것을 무상태로 설계할 수 있는 경우도 있고 없을 수도 있다.
    무상태 : 로그인 필요 없는 그냥 보여지는 화면
    상태 유지 : 로그인한 사용자의 경우 로그인 했다는 상태를 서버에 유지해야함 ,
    일반적으로 브라우저 쿠키와 서버 세션등을 사용해서 상태 유지한다.

클라이언트에 요청되는 데이터가 너무 많다.

비연결성

일반적으로 tcp/ip는 연결을 유지한다.
요청을 보내고, 응답을 받으면서 연결을 유지한다.

서버가 세 개의 클라이언트랑 연결이 되어 있음에도 한가지 일만 해야한다.

http는 기본적으로 연결을 유지하지 않는 모델이다.
일반적으로 초 단위의 이하의 빠른 속도로 응답한다.
1시간동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요청은 수십개 이하로 매우 작다.
예) 웹 브라우저에서 계속 연속해서 검색 버튼을 누르지는 않는다.

따라서 서버 자원을 매우 효율적으로 사용할 수 있다.

비연결성의 한계

서버에게 요청한 작업을 끝내고 바로 연결을 끊어버리게 되면 연결할 때
소요되는 3way handshake 시간이 추가된다.

웹 브라우저로 사이트를 요청하면 html 뿐만 아니라 css, 추가 이미지 등 수 많은 자원이 함께 다운로드
된다.

지금은 http 지속 연결 문제로 해결했다.

HTTP 에 대해


시작 라인 (요청 메세지)

GET/search?q=hello&hl=ko http/1.1

start line 은 크게  request-line 
method/ target/ version 

http method

종류 : get, post, put, delete
서버가 수행해야하는 동작을 지정해준다. 
get : 리소스 조회, 
post : 요청 내역 처리 

요청 메세지 - 요청대상

absolute -path 절대경로[?쿼리]
절대 경로는 /로 시작하는 것들이다. 

마지막에는 꼭 버전을 표시해준다..


시작 라인 (응답 메세지)

start-line 은 / status-line

status-line 은 HTTP-ver 띄고 status-code 띄고 reason-phrase CRLF

  • http 상태코드
    - 200 : 성공
    • 400 : 클라이언트 요청 오류
    • 500 : 서버 내부 오류
  • 이유 문구 : 사람이 이해 할 수 있는 짧은 상태 코드 설명 글이다.


필드 이름이랑 : 랑 붙이기

HTTP 헤더 용도

  • http 전송에 필요한 모든 부가 정보
    메세지 바디의 내용, 압축, 인증, 정보 등등
  • 표준 헤더가 너무 많다.
Content-Type:text/html;charset=UTF-8

HTTP 바디 용도

실제 전송할 데이터가 담겨 있음
html문서라던가, 이미지, 영상, 등등 바이트로 표현할 수 있는 모든 데이터를
전송할 수 있다!

profile
짜장면 쟁이

0개의 댓글