HTTP

henry·2024년 7월 14일
0

HyperText Transfer Protocol

HTTP는 클라이언트-서버 구조에서 데이터를 전송하기 위해 사용되는 프로토콜입니다. 거의 모든 형태의 데이터를 전송할 수 있으며, 서버 간 데이터 송수신에도 대부분 HTTP를 사용합니다.


HTTP 버전

HTTP/1.1

  • RFC2068(1997) → RFC2616(1999) → RFC7230~7235(2014)
  • TCP 기반으로 동작

HTTP 특징

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

클라이언트-서버 구조

HTTP는 클라이언트와 서버 간의 요청(Request)과 응답(Response) 구조로 동작합니다.

  • 클라이언트(Request): 사용자가 요청을 보냅니다.
  • 서버(Response): 서버가 요청에 대한 응답을 보냅니다.

예시:

클라이언트: GET /index.html HTTP/1.1
서버: HTTP/1.1 200 OK
       Content-Type: text/html

       <html>
         <body>
           <h1>Welcome to the homepage</h1>
         </body>
       </html>

무 상태 프로토콜 (Stateless)

Stateful

  • 상태를 유지함: 서버가 클라이언트의 이전 상태를 보존합니다.
  • 단점: 중간에 서버가 변경되면 변경된 서버는 클라이언트의 정보를 알지 못합니다.

Stateless

상태를 유지하지 않음: 서버가 클라이언트의 상태를 기억하지 않습니다.

장점: 서버 확장성이 높고, 서버가 변경되어도 클라이언트 정보를 알 수 있습니다.
클라이언트가 서버에 요청 시, 클라이언트 정보를 함께 전달하기 때문입니다.

단점: 클라이언트가 추가 데이터를 전송해야 합니다.


예시:

클라이언트: GET /profile HTTP/1.1
           Host: www.example.com
           Authorization: Bearer <token>
서버: HTTP/1.1 200 OK
       Content-Type: application/json

       {
         "name": "John Doe",
         "email": "john.doe@example.com"
       }

비 연결성 (Connectionless)

특징

  • 초 단위의 빠른 응답 속도
  • 수 천명이 서비스를 사용하고 있어도 실제 서버에서 처리하는 동시 요청은 수 십개 이하
  • 서버 자원을 매우 효율적으로 사용할 수 있음

단점

  • TCP/IP 연결을 다시 해야 함 - 3 way handshake 시간 추가
  • HTML, JS, CSS, 추가 이미지 등 수 많은 자원이 함께 다운로드

예시:

클라이언트: GET /style.css HTTP/1.1
           Host: www.example.com
서버: HTTP/1.1 200 OK
       Content-Type: text/css

       body {
         background-color: #f3f3f3;
       }

HTTP 메시지

HTTP 메시지는 클라이언트와 서버 간의 데이터 교환 형식입니다.
요청 메시지와 응답 메시지로 나뉩니다.


HTTP 요청 메시지

  • 메서드: GET, POST, PUT, DELETE 등
  • 경로: 요청할 리소스의 경로
  • 버전: HTTP 버전
  • 헤더: 요청과 관련된 메타데이터
  • 본문: (선택사항) 요청과 함께 전송할 데이터

예시:

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html

HTTP 응답 메시지

  • 버전: HTTP 버전
  • 상태 코드: 요청의 결과를 나타내는 숫자 코드 (200, 404, 500 등)
  • 상태 메시지: 상태 코드에 대한 설명
  • 헤더: 응답과 관련된 메타데이터
  • 본문: (선택사항) 응답과 함께 전송할 데이터

예시:

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

<html>
  <body>
    <h1>Welcome to the homepage</h1>
  </body>
</html>

단순함, 확장 가능

HTTP는 단순한 구조 덕분에 이해하고 구현하기 쉽습니다.
또한, 확장 가능한 설계를 통해 다양한 형태의 데이터를 전송하고,
새로운 기능을 추가할 수 있습니다.

예를 들어,
HTTP 헤더를 통해 추가 정보를 전송하거나,
HTTP 메서드를 통해 다양한 요청을 처리할 수 있습니다.

0개의 댓글