게으른 개발자의 끄적거림

HTTP란? (구조, 동작 방식, 요청 메서드 등)

끄적잉 2024. 6. 20. 22:30
반응형

## HTTP(하이퍼텍스트 전송 프로토콜) 개요

HTTP(HyperText Transfer Protocol)는 웹에서 데이터를 주고받기 위한 응용 계층 프로토콜입니다. HTTP는 웹 브라우저(클라이언트)와 웹 서버(서버) 간의 통신을 가능하게 하며, 인터넷에서 웹 페이지를 요청하고 전송하는 데 사용됩니다. 1990년 팀 버너스리(Tim Berners-Lee)에 의해 처음 개발되었으며, 현재는 월드 와이드 웹의 주요 프로토콜로 사용됩니다.

 


## HTTP의 동작 방식

HTTP는 요청-응답 프로토콜입니다. 클라이언트가 서버에 요청(request)을 보내고, 서버가 이에 대한 응답(response)을 반환하는 형태로 동작합니다. HTTP 통신의 기본 흐름은 다음과 같습니다:

1. **클라이언트가 서버에 요청을 보냄**: 사용자가 웹 브라우저에 URL을 입력하거나 링크를 클릭하면, 웹 브라우저는 해당 URL에 대한 HTTP 요청을 생성합니다.
2. **서버가 요청을 처리함**: 서버는 클라이언트의 요청을 받아들여 요청된 리소스를 찾고, 이를 처리합니다.
3. **서버가 응답을 반환함**: 서버는 요청에 대한 결과를 응답으로 클라이언트에 반환합니다. 이 응답에는 요청된 리소스(예: HTML 문서, 이미지 등)와 함께 상태 코드 및 헤더 정보가 포함됩니다.
4. **클라이언트가 응답을 처리함**: 클라이언트는 서버로부터 받은 응답을 처리하여 사용자가 볼 수 있도록 렌더링합니다.

 


## HTTP 요청 메서드

HTTP는 다양한 작업을 수행하기 위해 여러 가지 요청 메서드를 정의합니다. 주요 요청 메서드는 다음과 같습니다:

- **GET**: 서버에서 데이터를 요청합니다. 주로 웹 페이지나 이미지와 같은 리소스를 가져오는 데 사용됩니다.
- **POST**: 서버에 데이터를 제출합니다. 주로 폼 데이터를 제출하거나 데이터를 업로드하는 데 사용됩니다.
- **PUT**: 서버에 데이터를 업데이트합니다. 지정된 리소스를 업데이트하거나 생성합니다.
- **DELETE**: 서버에서 데이터를 삭제합니다. 지정된 리소스를 삭제합니다.
- **HEAD**: GET과 유사하지만, 서버는 응답 본문을 반환하지 않습니다. 상태 코드와 헤더 정보만 확인할 때 사용됩니다.
- **OPTIONS**: 서버에서 지원하는 HTTP 메서드를 요청합니다.
- **PATCH**: 리소스의 부분적인 업데이트를 수행합니다.

 

반응형


## HTTP 상태 코드

HTTP 응답에는 상태 코드를 포함하여 클라이언트에 요청의 결과를 알립니다. 상태 코드는 크게 다섯 가지 범주로 나눌 수 있습니다:

- **1xx (정보 응답)**: 요청이 수신되어 처리 중임을 나타냅니다.
- **2xx (성공)**: 요청이 성공적으로 처리되었음을 나타냅니다. 대표적으로 `200 OK`가 있습니다.
- **3xx (리다이렉션)**: 요청된 리소스가 다른 위치로 이동되었음을 나타냅니다. 대표적으로 `301 Moved Permanently`와 `302 Found`가 있습니다.
- **4xx (클라이언트 오류)**: 클라이언트의 요청에 오류가 있음을 나타냅니다. 대표적으로 `404 Not Found`와 `400 Bad Request`가 있습니다.
- **5xx (서버 오류)**: 서버가 요청을 처리하는 동안 오류가 발생했음을 나타냅니다. 대표적으로 `500 Internal Server Error`와 `503 Service Unavailable`가 있습니다.

 


## HTTP 헤더

HTTP 요청과 응답은 각각 헤더를 포함하여 추가적인 메타데이터를 전송합니다. 헤더는 다양한 정보를 포함하며, 주요 헤더는 다음과 같습니다:

 


### 요청 헤더

- **Host**: 요청하는 리소스를 호스팅하는 서버의 호스트명을 나타냅니다.
- **User-Agent**: 요청을 보내는 클라이언트 애플리케이션에 대한 정보를 제공합니다.
- **Accept**: 클라이언트가 처리할 수 있는 미디어 타입을 나타냅니다.
- **Content-Type**: 요청 본문의 미디어 타입을 나타냅니다.
- **Authorization**: 리소스에 접근하기 위한 인증 정보를 제공합니다.

### 응답 헤더

- **Content-Type**: 응답 본문의 미디어 타입을 나타냅니다.
- **Content-Length**: 응답 본문의 길이를 나타냅니다.
- **Set-Cookie**: 클라이언트에 쿠키를 설정하는 데 사용됩니다.
- **Cache-Control**: 클라이언트나 중간 캐시가 응답을 어떻게 캐시할지를 지시합니다.
- **Location**: 리다이렉션할 URL을 나타냅니다.

## HTTP/1.0 vs HTTP/1.1 vs HTTP/2

 

 

HTTP 프로토콜은 여러 버전이 있으며, 각 버전은 성능과 기능 면에서 개선되었습니다.

 


### HTTP/1.0

HTTP/1.0은 기본적인 요청/응답 모델을 제공하지만, 각 요청마다 새로운 TCP 연결을 생성합니다. 이로 인해 많은 수의 요청을 처리할 때 성능 저하가 발생할 수 있습니다.

 


### HTTP/1.1

HTTP/1.1은 지속 연결(persistent connection)을 도입하여 여러 요청을 단일 TCP 연결에서 처리할 수 있게 했습니다. 추가적으로, 파이프라이닝(pipelining)을 통해 여러 요청을 동시에 보낼 수 있지만, 이는 모든 서버와 클라이언트에서 지원되는 것은 아닙니다. 또한, HTTP/1.1은 캐싱 메커니즘과 가압축, 콘텐츠 협상(Content Negotiation) 등의 기능을 개선했습니다.

 


### HTTP/2

HTTP/2는 성능 향상을 위해 바이너리 프레이밍 계층을 도입했습니다. 이는 텍스트 기반의 HTTP/1.x와 달리 바이너리 형식으로 데이터를 전송하여 더 효율적인 전송을 가능하게 합니다. 주요 특징은 다음과 같습니다:

- **멀티플렉싱(Multiplexing)**: 단일 TCP 연결에서 여러 요청과 응답을 동시에 전송할 수 있습니다.
- **헤더 압축(Header Compression)**: 헤더 정보를 효율적으로 압축하여 전송합니다.
- **서버 푸시(Server Push)**: 서버가 클라이언트의 요청 없이도 관련 리소스를 미리 전송할 수 있습니다.

## HTTPS(HTTP Secure)

HTTPS는 HTTP에 SSL/TLS 프로토콜을 추가하여 데이터 전송을 암호화한 프로토콜입니다. 이를 통해 클라이언트와 서버 간의 통신이 도청이나 변조로부터 보호됩니다. HTTPS는 다음과 같은 보안 요소를 제공합니다:

- **암호화**: 전송되는 데이터를 암호화하여 중간에 도청할 수 없게 합니다.
- **무결성**: 데이터의 무결성을 보장하여 전송 중 데이터가 변경되지 않도록 합니다.
- **인증**: 서버의 신원을 인증하여 피싱 등의 공격을 방지합니다.

## HTTP/3와 QUIC

HTTP/3는 기존의 TCP 대신 UDP를 기반으로 하는 QUIC(Quick UDP Internet Connections) 프로토콜을 사용합니다. 이는 HTTP/2의 단점을 보완하여 더 빠르고 안정적인 연결을 제공합니다. HTTP/3의 주요 특징은 다음과 같습니다:

- **빠른 연결 설정**: 초기 연결 설정 시간이 감소합니다.
- **내장된 보안**: QUIC은 TLS를 기본적으로 포함하여 보안을 강화합니다.
- **보다 나은 멀티플렉싱**: 단일 연결의 패킷 손실이 다른 스트림에 영향을 주지 않습니다.

HTTP는 월드 와이드 웹의 핵심 프로토콜로서, 지속적으로 발전하며 웹 상에서의 데이터 통신을 지원합니다. HTTP/1.0에서 HTTP/3에 이르기까지의 발전 과정은 웹의 성능과 보안성을 크게 향상시켰습니다. 앞으로도 HTTP는 인터넷 기술의 중요한 부분으로 남아 지속적인 개선과 발전을 이룰 것입니다.

반응형