[HTTP] HTTP 기본

헤일리의 개발 일지·2024년 4월 14일

HTTP(HyperText Transfer Protocol)

하이퍼 텍스트 전송 프로토콜(HTTP)은 웹 브라우저와 웹 서버가 ISO Latin1 영문자를 사용하여 서로 '통신'할 수 있도록 하는 프로토콜입니다.

지금은 http에 html, image, video 등 모든 것을 담아서 전달할 수 있고,
서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용합니다.


HTTP 특징

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

클라이언트 서버 구조

HTTP에서는 클라이언트가 리퀘스트를 보내면 서버가 응답할 때까지 기다렸다가 클라이언트가 그 응답을 받고 동작합니다.

클라이언트 서버 구조는 클라이언트와 서버라는 개념이 분리되어 있습니다.
서버에서는 비즈니스 로직 및 데이터 같은 것을 처리하고, 클라이언트는 UI에 집중합니다.
이렇게 분리를 함으로써, 클라이언트와 서버가 각각 독립적으로 진화할 수 있습니다.

무상태 프로토콜(Stateless)

  • 서버가 클라이언트의 상태를 보존 X
  • 클라이언트가 상황에 따라 요청과 함께 필요 데이터를 보냄
  • 장점
    - 서버 확장성 높음(Scale out)
  • 단점
    - 클라이언트가 추가 데이터 전송
  • 실무 한계
    - 모든 것을 무상태로 설계할 수 있는 경우도 있고 없는 경우도 있음
    • 무상태 ex) 로그인이 필요없는 단순한 서비스 소개 화면
    • 상태 유지 ex) 로그인
    • 일반적으로 브라우저 쿠키와 서버 세션 등을 사용해서 상태 유지
    • 상태 유지는 최소한만 사용

비연결성(connectionless)

  • HTTP는 기본이 연결을 유지하지 않는 모델
  • 최소한의 자원으로 서버 유지 가능 -> 서버 자원 효율적으로 사용
  • 한계
    - TCP/IP 연결을 새로 맺어야 함 -> 3 way handshake 시간 추가
  • 극복
    - HTTP 지속 연결(Persistent Connections)

HTTP 메시지

시작 라인

  • 요청 메시지
    • start-line = request-line / status-line
    • request-line = method SP(공백) request-target SP HTTP-version CRLF(엔터)
    - HTTP 메서드 (GET: 조회)
    - 요청 대상 (/search?q=hello&hl=ko)
    - HTTP Version
  • 응답 메시지
    • start-line = request-line / status-line
    • status-line = HTTP-version SP status-code SP reason-phrase CRLF
    - HTTP 버전
    - HTTP 상태 코드: 요청 성공, 실패를 나타냄 (200: 성공 / 400: 클라이언트 요청 오류 / 500: 서버 내부 오류)
    - 이유 문구: 사람이 이해할 수 있는 짧은 상태 코드 설명 글

HTTP 헤더

HTTP 전송에 필요한 모든 부가정보

HTTP 메시지 바디

실제 전송할 데이터

단순함, 확장 가능

  • HTTP는 단순
  • HTTP 메시지도 단순
  • 크게 성공하는 표준 기술은 단순하지만 확장 가능한 기술

0개의 댓글