HTTP의 기초 개념

LeeYulhee·2024년 4월 29일

👉 HTTP란?


  • Hypertext Transfer Protocol의 약자
  • 인터넷에서 정보를 교환하기 위한 규칙(프로토콜)
  • 웹 브라우저와 웹 서버 사이에 데이터를 주고받는 방법을 정의
  • 클라이언트가 서버에 데이터를 요청하는 과정과 서버가 그 요청에 대해 데이터를 보내는 응답을 하는 과정을 규정하는 프로토콜
  • HTTP 프로토콜은 상태를 유지하지 않는다는 특성이 있음(stateless)
    • = HTTP는 이전 통신을 기억하지 않음



👉 HTTP 메세지의 종류와 구조


  • HTTP 메세지의 종류

    • 요청(HTTP Request)
      • 웹브라우저(클라이언트)가 서버에 요청을 보냄
    • 응답(HTTP Response)
      • 웹서버가 요청에 대한 응답을 반환
      • 처리 결과를 응답으로 보내는데, 상태코드를 함께 반환
  • HTTP 메세지의 구성

    • 예시

      POST /submit-form HTTP/1.1
      Host: www.example.com
      Content-Type: application/x-www-form-urlencoded
      Content-Length: 27
      Connection: keep-alive
      
      username=johndoe&password=1234
    • HTTP 메세지 : Header

      • HTTP 요청이나 응답에 대한 메타데이터를 담고 있음
      • 주로 통신의 성격, 데이터의 종류, 인코딩 방식, 인증 정보 등을 포함
      • 요청 Header(Request Header)는 클라이언트가 서버에 요청할 때 보내는 메타데이터
        • User-Agent (사용자 에이전트 정보), Accept (클라이언트가 받을 수 있는 미디어 타입), Authorization (인증 정보) 등이 있음
      • 응답 Header(Response Header)는 서버가 클라이언트의 요청에 응답할 때 보내는 메타데이터
        • Content-Type (응답의 미디어 타입), Set-Cookie (쿠키 설정), Cache-Control (캐시 제어) 등이 있음
    • HTTP 메세지 : Body

      • 실제 데이터를 담고 있는 부분
      • 요청 Body(Request Body)는 주로 POST, PUT, PATCH 요청에서 사용
        • 폼 데이터, JSON, 파일 등을 포함
      • 응답 Body(Response Body)는 서버가 클라이언트에게 보내는 실제 데이터
        • HTML, JSON, 이미지 파일 등이 있음



👉 HTTP 메서드


  • 클라이언트가 서버에 어떤 작업을 수행하길 원하는지를 명시하는 방법
  • 종류
    • GET : 데이터를 조회할 때 사용, 정보를 가져오기만 하고 데이터를 변경하지 않음
    • POST : 새로운 데이터를 서버에 전송하거나 추가할 때 사용
    • PUT : 서버에 있는 데이터를 새로운 데이터로 전체 교체할 때 사용, 기존 데이터를 새 데이터로 덮어씀
    • DELETE : 서버에서 데이터를 삭제할 때 사용
    • PATCH : 서버에 있는 데이터의 일부를 수정할 때 사용, PUT과 유사하지만, 일부만 변경
    • HEAD : GET과 비슷하지만, 서버에서 헤더 정보만 가져옴
    • OPTIONS : 대상 리소스에 대한 통신 옵션을 조회할 때 사용



👉 HTTP 상태 코드


  • 서버가 클라이언트의 요청을 어떻게 처리했는지 알려주는 코드
  • 종류
    • 1xx (정보 응답) : 요청을 받았으며 프로세스가 계속 진행중임을 의미
    • 2xx (성공) : 요청이 성공적으로 수행 되었음을 나타냄
      • 200 OK : 요청이 성공적으로 처리됨
      • 201 Created : 요청이 성공적이고 새로운 리소스가 생성됨
    • 3xx (리다이렉션) : 요청을 완료하기 위해 추가 동작이 필요
      • 301 Moved Permanently : 요청한 리소스가 새 위치로 영구적으로 이동함
      • 302 Found : 요청한 리소스가 일시적으로 다른 위치로 이동함
    • 4xx (클라이언트 오류) : 클라이언트의 요청에 오류가 있어 요청을 수행할 수 없음
      • 400 Bad Request : 서버가 요청을 이해하지 못함
      • 404 Not Found : 요청한 리소스를 찾을 수 없음
    • 5xx (서버 오류) : 서버가 유효한 요청을 처리하지 못했음
      • 500 Internal Server Error : 서버 내부 오류로 요청을 처리할 수 없음
      • 503 Service Unavailable : 서버가 요청을 처리할 준비가 되어 있지 않음



👉 HTTP/1.1 통신


  • 1997년에 도입된 HTTP 프로토콜의 버전
  • 웹 통신의 기본적인 방식을 제공
  • 특징
    • 지속 연결(Persistent Connections)
      • 하나의 TCP 연결을 통해 여러 HTTP 요청과 응답을 주고받을 수 있어 연결 설정과 해제의 오버헤드를 줄일 수 있음
      • HTTP Keep-Alive라고도 함
    • 파이프라이닝(Pipelining)
      • HTTP에서는 일반적으로 하나의 HTTP 요청을 송신하고, 응답을 받을 때까지 다음 요청을 보낼 수 음
      • HTTP 파이프 라인을 사용하면 클라이언트가 여러 요청을 연속적으로 보내고 서버가 순차적으로 응답할 수 있음
      • 다만 실제로는 성능 향상에 제한적이라는 문제가 있음
    • 헤더 압축 미지원
      • HTTP/1.1에서는 헤더를 압축하지 않아 데이터 전송량이 많을 수 있음
    • 홀딩(Holdding) 문제
      • 한 연결에서 특정 요청의 지연이 다른 모든 요청의 처리를 지연시킬 수 있음



👉 HTTP/2 통신


  • HTTP/2는 2015년에 공식적으로 표준화된 HTTP 프로토콜의 새로운 버전
  • 특징
    • 이진 프로토콜
      • HTTP/2는 텍스트 기반이 아닌 이진 프로토콜을 사용하여 더 효율적인 파싱과 낮은 오류 가능성을 제공
    • 단일 연결
      • 여러 요청과 응답을 동시에 하나의 연결로 처리할 수 있으며, 이를 통해 네트워크 지연을 줄이고 페이지 로드 시간을 개선
    • 헤더 압축
      • HPACK 압축을 사용하여 헤더 데이터를 효과적으로 압축하고 중복 헤더 전송을 줄임
    • 서버 푸시
      • 서버가 클라이언트의 요청을 기다리지 않고 능동적으로 리소스를 보낼 수 있어, 예측 가능한 리소스 요구에 대해 더 빠른 로딩을 가능하게 함
    • 스트림
      • 동시에 여러 메시지를 교환할 수 있는 독립적인 양방향 데이터 흐름
      • 하나의 TCP 연결 안에서 여러 스트림이 동시에 존재할 수 있으며, 각 스트림은 각자의 요청과 응답을 처리



👉 HTTP/1.1과 HTTP/2 차이


  • 연결 방식의 차이
    • HTTP/1.1
      • 각 요청을 처리하기 위해 별도의 TCP 연결이 필요
      • 즉, 각 요청마다 별도의 TCP 연결을 필요로 한다는
      • 이는 여러 리소스를 동시에 다운로드하려면 여러 연결이 필요하다는 것을 의미
      • 이로 인해 연결의 설정과 종료에서 오는 지연이 발생할 수 있음
    • HTTP/2
      • 단일 TCP 연결을 사용하여 여러 요청과 응답을 동시에 처리할 수 있음
      • 단일 TCP란, 여러 요청과 응답을 하나의 TCP 연결을 통해 동시에 처리할 수 있다는 의미
      • 이것을 '멀티플렉싱'이라고 하며, 웹 페이지 로드 시간을 효율적으로 줄일 수 있음
  • 헤더 압축
    • HTTP/1.1
      • 헤더 정보가 매 요청마다 중복 전송되어, 헤더 오버헤드가 크게 발생
    • HTTP/2
      • HPACK 압축 방식을 사용하여 헤더 정보를 효율적으로 압축하고, 이전에 전송된 헤더 정보를 재활용할 수 있음
      • 이로 인해 데이터 전송량이 줄고, 통신이 빨라짐
  • 서버 푸시
    • HTTP/1.1
      • 클라이언트가 요청하지 않은 리소스는 서버가 능동적으로 보내지 못함
    • HTTP/2
      • 서버 푸시 기능을 통해 서버가 클라이언트에게 필요할 것으로 예상되는 리소스를 미리 보낼 수 있음
      • 추가적인 라운드 트립 시간을 절약할 수 있음
  • 우선순위 부여
    • HTTP/1.1
      • 여러 요청의 우선순위를 지정할 수 있는 기능이 없음
    • HTTP/2
      • 클라이언트는 서버에 여러 요청의 우선순위를 지정할 수 있으며, 이를 통해 중요한 리소스를 먼저 로드할 수 있음
profile
끝없이 성장하고자 하는 백엔드 개발자입니다.

0개의 댓글