본문 바로가기
Computer Science/네트워크

[네트워크] HTTP is Everywhere! and Feature 2탄 and HTTP 메세지 뜯어보기

by SIXXXX_ 2022. 3. 10.
728x90

HTTP 특징

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

 

 

Stateless  vs Stateful

Stateful : 상태유지, 꼭 필요한 정도만 사용해야한다, 데이터를 많이 보내기 때문

Stateless : 무상태

 

  • 두개 중 HTTP는 Stateless하다.
  • 서버가 클라이언트의 상태를 보존하지 않는다.
  • 장점은 대체가능하니까 클라이언트의 요청이 많을 때, 서버가 장애가 났을때 Scale-out(수평확장)하는 서버의 확장성이 높다.
  • 단점은 추가 데이터를 전송하면서 다소 지연된다.

 

실무: 

로그인이 필요없는 단순한 서비스 소개 화면은 무상태(Stateless)

로그인은 상태 유지(Stateful), 쿠키와 서버세션 등을 사용해서 상태 유지(최소한만 사용한다)

 

 

비연결성

  • 기본적으로 연결을 유지하지 않는 HTTP
  • 일반적으로 초 단위 이하의 빠른 속도로 응답한다.
  • 서버 자원을 효율적으로 사용가능하다.
  • 수천명이 서비스를 사용해도 실제 서버에서 동시처리하는 요청값은 작다. 
  • 단점은 TCP/IP연결을 새로 맺어야 한다. 3-way-handshake 시간 추가되어서 응답속도가 걸릴 수 있다
  • 지금은 HTTP 지속연결로 문제를 해결했다
  • HTTP/2, HTTP/3 에서 더 많은 최적화를 함.

 

 

HTTP 메세지

 

 HTTP메세지 구조

  • HTTP 요청 메세지(HTTP Request Message) : get, path, header, 공백라인(메세지가 없다면)
  • HTTP 응답 메세지(HTTP Response Message) : http 버전(ex. HTTP/3), 요청(상태코드), header값, 공백라인, body(html)

 

HTTP 메세지 구조

  1. start-line : 시작라인
  2. header : 헤더
  3. empty line : 공백라인(CRLF)
  4. message body

1) start-line

시작라인 = Request-line (요청메세지) + status-line

 

1-1) Request-line : 

HTTP메서드(get or post... ) : 서버가 수행해야할 동작 지정

요청대상(/쿼리스트링: ?) : 절대경로와 쿼리(다른 유형 의 경로지정도 있다)

 

HTTP Version

응답메세지 : staus-line = HTTP-version status-code reason-phrase CRLF

 

1-2) HTTP 상태 코드(status-line) : 요청성공, 실패

200 : 성공

400 : 클라이언트 요청 오류

500 : 서버 내부 오류

 

 

2) HTTP 헤더 :

header-field = field-name(ex. Host, 대소문자 구분없음): OWS field-value(대소문자 구분) OWS (OWS : 띄어쓰기 허용)

용도

  • HTTP전송에 필요한 모든 부가 정보
  • cache, 서버 애플리케이션 정보 , 요청클라이언트 정보 등 엄청 많음
  • 표준헤더가 너무 많음
  • 필요시 임의의 헤더추가 가능: 약속한 서버와 클라이언트만 이해

 

3) 공백라인:

말그대로 공백

 

4) HTTP 메세지 바디(HTTP Message Body):

  • 실제 전송할 데이터, HTML 문서, 이미지 ,영상 JSON 등 byte로 표현할 수 있는 모든 데이터 전송 가능함

 

 

특징 정리

  • HTTP 메세지에 모든 것을 전송한다!!
  • HTTP 역사 HTTP/1.1 을 기준으로 학습
  • 클라이언트 - 서버 구조
  • 무상태프로토콜*스테이스리스(Stateless)
  • HTTP 메세지
  • 단순함, 확장 가능하다.
  • 지금은 HTTP 시대!!