[HTTP] HTTP 특성

미밈·2023년 3월 21일
0
post-thumbnail

HTTP ( HyperText Transfer Protocol )
모든 형태의 데이터를 HTTP로 전송 ( HTML, JSON, XML, IMAGE )

👉 전송 프로토콜에 따른 버전 차이
TCP : HTTP/1.1, HTTP/2
UDP : HTTP/3
주로 HTTP/1.1 사용 ( 점차 2, 3도 증가 )


📌 특징

👉 기본적으로 클라이언트 - 서버 구조

▪️ 클라이언트 : 서버에 요청을 보내고 응답 대기 (사용성, UI에 집중)
▪️ 서버 : 요청에 대한 결과를 만들어 응답. (비지니스 로직)
▪️ 분리시 각각 독립적으로 진화 가능

👉 ✨ 무상태 프로토콜(Stateless) ✨

서버가 클라이언트의 상태를 보장 X
이전에 어떤 요청이 있었는지 고려하지 않는다
-> 고객이 원하는 요청사항을 모두 기재
-> 중간에 서버가 바뀌어도 아무 문제가 없다 => 확장성 up

상태유지로 통신할 경우 상대 서버가 다운시 다시 처음부터 요청해야 함
-> 무상태일시, 언제나 다른 서버 대체 가능
( = 스케일 아웃 - 수평 확장 유리 )

❗실무 한계

  • 무상태 설계 가능한 있는경우, 없는 경우도 있다.

  • 상태 유지 : ex ) 로그인
    일반적으로 브라우저 쿠키 + 서버 세션을 사용해 상태유지
    상태유지는 최소한만 사용해야함.
    데이터를 너무 많이 보내야한다.

  • 최대한 무상태 + 최소한의 상태유지

👉 비연결성

  • 연결 유지
    -> 연결을 유지하는동안 서버 자원 소모

  • 유지하지 않는 모델
    -> 필요한 것만 주고받고 연결 X : 서버는 최소한의 자원 유지

  • 일반적으로 빠른 속도로 응답 -> 서버 자원을 효율적으로 사용 O

  • 요청이 많이들어와도 실제로 서버에서 처리하는 요청은 매우 작음

❗ 단점

  • TCP/IP 연결을 새로 맺어야 함 ( 3 way handshake 다시 반복 )
  • 웹 브라우저 요청시 HTML + 자바 스크립트 이미지 등등 많은 자원들이 함께 다운로드
  • HTTP : 지속연결을 기본적으로 사용
    ▪️ 지속연결 : 연결 > 원하는 자원을 다 받을 때 까지 요청/응답 처리 > 종료

👉 HTTP 메시지를 통해 통신

  • HTTP 메시지 : 요청메시지 / 응답 메시지
  • HTTP 메시지 구조 : 시작라인 - 헤더 - 공백라인(필수) - 메시지 body

시작 라인

  • 요청메시지
    request-line
    = method SP(공백) request-target SP HTTP-version CRLF(엔터)
    = 메서드 요청대상 HTTP버전
    메서드 : 서버가 수행해야할 동작 / GET, POST, PUT, DELETE
    GET : 리소스 조회 / POST : 요청내역 처리
    요청 대상 : 절대경로( "/"로 시작하는 경로 )로 시작

  • 응답 메시지
    status-line
    = HTTP-version SP status-code SP reason-phrase CRLF
    = HTTP 버전 HTTP상태 코드 이유문구
    HTTP 상태 코드 : 요청 성공/실패
    200 : 성공, 400 : 클라이언트 요청 오류, 500 : 서버 내부 오류
    이유 문구 : 사람이 이해할 수 있는 짧은 상태 코드 설명

헤더

  • field-name ":" OWS field-value OWS(OWS: 띄워쓰기 허용)
  • field-name 은 대소문자 구분 없음 (value는 O)
  • TTP 전송에 필요한 모든 정보 포함
    표준헤더 많음, 필요시 임의의 헤더 추가 가능

메시지 바디

  • 실제 전송할 데이터
    ( HTML문서, 이미지, 영상, JSON 등등 )

5. 단순함, 확장 가능

profile
하나씩 차근차근 해보는 초초초급개발자

0개의 댓글