TIL- 공부편/COMPUTER SIENCE

📌 TIL24: HTTP의 개념과 동작 원리

creator7087 2025. 3. 18. 20:03

1️⃣ HTTP(HyperText Transfer Protocol)란?

HTTP(하이퍼텍스트 전송 프로토콜)은 웹에서 데이터를 주고받기 위한 통신 규약입니다.

  • HTML, 이미지, JSON, 파일 등 다양한 데이터를 전송할 수 있습니다.
  • HTTP는 클라이언트(사용자)와 서버 간의 요청(Request) 및 응답(Response)을 처리하는 프로토콜입니다.
  • 서버와 서버 간의 데이터 통신에도 사용될 수 있습니다.

💡 HTTP의 주요 버전
현재 가장 많이 사용되는 HTTP 버전은 HTTP/1.1(TCP 기반)입니다.

  • 최신 기술에서는 HTTP/2, HTTP/3(UDP 기반) 사용이 증가하고 있습니다.

2️⃣ HTTP의 동작 방식

HTTP는 기본적으로 클라이언트-서버 모델을 기반으로 동작합니다.

  1. 클라이언트(웹 브라우저 등)가 요청(Request)을 보냅니다.
  2. 서버는 요청을 확인하고, 필요한 처리를 한 후 응답(Response)을 보냅니다.

💡 HTTP의 특징

  1. 무상태(Stateless)
    • 서버는 클라이언트의 상태를 유지하지 않습니다.
    • 그러다보니 Scale Out 수평 확장성이 높습니다.(서버 증설 편리)
    • 하지만 요청마다 독립적으로 처리되므로, 클라이언트가 추가적인 데이터를 포함해야 합니다.
    • 해결 방법: 쿠키(Cookie), 세션(Session), 토큰(Token) 사용
  2. 비연결(Connectionless)
    • 요청을 처리한 후, 연결을 끊습니다.(검색 후 인터넷 연결이 끊겨도 현재 창 유지)
    • 그러다보니 서버 자원을 효율적으로 사용할 수 있다
    • 하지만 새로운 요청이 발생하면 다시 연결을 설정해야 되다보니 오래 걸립니다.
    • 해결 방법: HTTP 지속 연결(Persistent Connection) → 여러 요청을 하나의 연결에서 처리
더보기

HTTP 지속연결(Persistent Connections)


3️⃣ HTTP 메시지 구조

HTTP 메시지는 요청(Request) 메시지응답(Response) 메시지 두 가지 형태로 나뉩니다.

🔹 1. 요청(Request) 메시지 구조

  1. Start Line (요청 시작 줄)
    • HTTP 메서드(Method): 요청의 목적을 정의 (GET, POST, PUT, DELETE 등)
    • Request Target: 요청 대상 (/search?keyword=sparta)
    • HTTP Version: HTTP 버전 정보 (1.1)
  2. Header (요청 헤더)
    • 요청에 대한 추가 정보를 포함 (Host, User-Agent, Content-Type 등)
  3. Empty Line (공백 줄)
    • 요청 헤더와 메시지 본문을 구분하는 역할
  4. Message Body (요청 데이터)
    • 실제 전송할 데이터 (JSON, HTML, 이미지 등)

💡 예제 요청 메시지

더보기
GET /search?keyword=sparta HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html

🔹 2. 응답(Response) 메시지 구조

  1. Start Line (응답 시작 줄)
    • HTTP 버전 (1.1)
    • 상태 코드(Status Code): 요청 성공/실패 여부 (200 OK, 404 Not Found 등)
    • 상태 메시지(Status Text)
  2. Header (응답 헤더)
    • 응답 데이터에 대한 추가 정보 (Content-Type, Server, Date 등)
  3. Empty Line (공백 줄)
    • 헤더와 메시지 본문을 구분하는 역할
  4. Message Body (응답 데이터)
    • 실제 전송되는 데이터 (HTML, JSON, 이미지 등)

💡 예제 응답 메시지

더보기
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 1234

<html>
<body>응답 데이터</body>
</html>

 

요약

  • HTTP(HyperText Transfer Protocol)은 웹에서 데이터를 주고받는 통신 프로토콜입니다.
  • HTTP는 무상태(Stateless), 비연결(Connectionless) 방식으로 동작하지만, 쿠키/세션과 지속 연결(Persistent Connection)을 통해 이를 보완할 수 있습니다.
  • HTTP 메시지는 요청(Request)과 응답(Response)으로 구성됩니다.
  • HTTP 메서드(Method)를 통해 서버와 다양한 방식으로 상호작용할 수 있습니다.

🍀 알쓸신잡 🍀-헤더편

더보기

1️⃣ HTTP 헤더란?

HTTP 헤더는 클라이언트와 서버가 요청(Request) 또는 응답(Response) 시 부가적인 정보를 포함하여 전송할 수 있도록 하는 데이터 블록입니다.

  • 헤더는 HTTP 메시지의 시작 부분에 위치하며, 뒤에 오는 본문(Body)과 구분됩니다.
  • 특정 프로토콜의 헤더는 해당 프로토콜의 기능을 제공하는 데 필요한 정보를 포함합니다.

💡 HTTP 헤더의 역할

  • 클라이언트와 서버 간 통신에 필요한 메타데이터를 포함
  • 요청 및 응답의 특성을 정의하고 데이터 처리를 도와줌
  • 보안, 캐싱, 콘텐츠 압축 등 다양한 기능을 제공

2️⃣ HTTP 헤더의 종류

🔹 1. 종단간 헤더(End-to-End Headers)

  • 최종 수신자(클라이언트 또는 서버)에게 반드시 전달되어야 하는 헤더입니다.
  • 중간 프록시 서버헤더를 변경할 수 없으며, 반드시 저장해야 합니다.

🔹 2. 홉간 헤더(Hop-by-Hop Headers)

  • 단일 네트워크 연결(클라이언트 ↔ 서버)에서만 의미를 가지는 헤더
  • 프록시 서버를 거칠 때 다시 전달되지 않으며 캐시할 수 없습니다.
  • 대표적인 홉간 헤더:
    • Connection
    • Keep-Alive
    • Proxy-Authenticate
    • Proxy-Authorization
    • Transfer-Encoding
    • Upgrade

3️⃣ HTTP 헤더의 주요 카테고리

🔹 1. 일반 헤더(General Headers)

  • 요청(Request)과 응답(Response)에서 공통적으로 사용되며, 특정 컨텐츠(Body)와는 관련이 없습니다.
헤더설명
Date 현재 서버의 날짜 및 시간
Cache-Control 캐싱 정책을 지정 (예: no-cache, max-age=3600)
Pragma HTTP/1.0에서 사용된 캐싱 제어 (HTTP/1.1에서는 Cache-Control 사용)
Connection 연결을 유지할지(keep-alive), 닫을지(close) 설정

🔹 2. 요청(Request) 헤더

  • 클라이언트에서 서버로 요청할 때 추가 정보를 전달하는 헤더
헤더설명
Host 요청 대상 서버의 도메인명 및 포트
User-Agent 요청을 보내는 클라이언트 정보(브라우저, OS 등)
Referer 현재 페이지로 오기 전 방문한 URL 정보
Accept 클라이언트가 받을 수 있는 콘텐츠 유형 (예: text/html, application/json)
Accept-Language 클라이언트가 선호하는 언어
Authorization 클라이언트의 인증 정보 포함
Cookie 클라이언트의 쿠키 정보 포함

🔹 3. 응답(Response) 헤더

  • 서버가 클라이언트에게 응답할 때 포함하는 부가 정보
헤더설명
Server 서버의 소프트웨어 정보
Location 클라이언트를 특정 URL로 리디렉션
Set-Cookie 클라이언트에 쿠키를 저장하도록 지시
ETag 콘텐츠의 고유 식별자(변경 여부 확인)
Expires 캐시가 만료되는 날짜 지정
Last-Modified 마지막으로 수정된 날짜

🔹 4. 엔터티 헤더(Entity Headers)

  • HTTP 메시지의 본문(Body)과 관련된 정보를 포함
헤더설명
Content-Type 본문의 MIME 타입 지정 (예: text/html, application/json)
Content-Length 본문의 크기(바이트)
Content-Encoding 콘텐츠 압축 방식 (gzip, deflate 등)
Content-Language 본문의 언어 지정
Content-Location 콘텐츠의 실제 URL 지정

 

댓글수0