HTTP

HTTP란?

  • HyperText Transfer Protocol
  • 지금은 HTTP 시대라고 할 만큼 모든 것을 HTTP 메세지에 담아서 전송
    • HTML, TEXT, 이미지, 음성, 영상, 파일, JSON, XML (API) 등등
    • 서버 간에 데이터를 주고 받을 때도 대부분 HTTP 사용
  • HTTP/1.1
    • 1997년 개발
    • 가장 많이 사용
  • 기반 프로토콜
    • TCP : HTTP/1.1, HTTP/2
    • UDP : HTTP/3
  • 크롬 개발자 모드 - Network - Protocol에서 사용하는 HTTP 버전 확인 가능 (h2 : HTTP/2)

HTTP 특징

클라이언트 서버 구조

  • Request - Response 구조
  • 클라이언트 : 서버에 요청을 보내고, 응답을 대기
  • 서버 : 요청에 대한 결과를 만들어서 응답
  • 클라이언트와 서버가 분리되어 있어 둘이 독립적이게 진화 가능

무상태 프로토콜 (Stateless)

  • Stateful과 반대의 개념
  • 서버가 클라이언트의 상태를 보존하지 않음
  • 대용량 트래픽이 한 번에 몰릴 때를 대비하기 위하여 Stateless하게 개발하는 것이 중요
  • 장점 : 서버 확장성이 높음 (스케일 아웃 - 수평 확장)
  • 단점 : 클라이언트가 많은 데이터를 서버로 전송
  • 한계
    • 모든 것을 무상태로 설계할 수도 있으나, 그러지 못하는 경우도 있음

Stateful


항상 같은 서버가 유지되어야 에러가 발생하지 않음.
로그인과 같은 기능들 => 쿠키, 세션 등을 사용해서 상태 유지 (최소한으로 사용)

비연결성

  • 연결을 유지하지 않는 모델
  • 일반적으로 초 단위 이하의 빠른 속도로 응답
  • 1시간 동안 수천명이 서비스를 사용해도 실제 서버에서 동시에 처리하는 요쳥은 수십개 이하로 매우 작음
  • 서버 자원을 가용성을 높여줌
  • 한계
    • 매번 연결을 끊으므로 TCP/IP 연결을 새로 맺어야 함
    • HTML 이외 js, css, img 등 많은 자원이 매번 다운로드 되므로 비효율적
    • HTTP 지속 연결로 문제 해결

HTTP 메세지를 통해 통신

  • HTTP 메세지 구조

HTTP 메세지 구조

  • request-line (요청 메세지)
    • method SP(공백) request-target SP(공백) HTTP-version CRLF(엔터)
    • method
    • request-target (요청 대상)
      • 절대경로[?query]
  • start-line - status-line (응답 메세지)
    • HTTP-version SP(공백) status-code SP(공백) reason-phrase CRLF(엔터)
    • status-code
      • 200, 400, 500과 같은 요청에 대한 성공, 실패를 나타내주는 코드
    • reason-phrase
      • 사람이 이해할 수 있는 짧은 상태 코드 설명 글
  • header
    • field-name: OWS(띄어쓰기 허용) field-value OWS(띄어쓰기 허용)
    • field-name 대소문자 구분 X
    • HTTP 전송에 필요한 모든 부가 정보가 포함
    • 표준 헤더가 너무 많음…
    • 필요시 임의의 헤더 추가 가능
  • body
    • 실제 전송할 데이터
    • byte로 표현할 수 있는 모든 데이터 전송 가능

단순하며 확장이 가능

  • 단순하고 스펙도 읽어볼만 함
  • HTTP 메세지도 매우 단순함



인프런 - 김영한님의 모든 개발자를 위한 HTTP 웹 기본 지식을 정리한 내용입니다.


김영한님 인프런 강의

댓글남기기