본문 바로가기

HTTP

[HTTP] HTTP 메시지

HTTP 메시지는 클라이언트와 서버 간의 데이터 교환 형식으로, 크게 요청(Request) 메시지 응답(Response) 메시지로 구분된다.

또한, 각 메시지는 시작 라인(Start Line), 헤더(Header), 본문(Body)으로 구성된다.

요청 메시지의 시작 라인은 요청 라인(Request Line), 응답 메시지의 시작 라인은 상태 라인(Status Line)이라 한다.

 

 


1. HTTP 요청 메시지

<요청 라인>
<헤더>
<빈 줄>
<본문 (필요한 경우)>

 

 

✅ 1.1. 요청 라인 (Request Line)

 

요청의 첫 번째 줄로, 다음과 같은 형식으로 구성된다.

<메서드> <URI> <HTTP 버전>
  • 메서드: 수행할 작업 (예: GET, POST, PUT, PATCH, DELETE)
  • URI: 요청하는 리소스의 경로 → 보통은 절대 경로("/" 로 시작하는 경로)로 지정
  • HTTP 버전: 사용되는 HTTP 프로토콜 버전 (예: HTTP/1.1, HTTP/2, HTTP/3)

 

✔️ 요청 라인 예시

GET /products?category=shoes HTTP/1.1

 


 1.2. 요청 헤더 (Request Headers)

 

요청에 대한 추가 정보를 제공하는 Key: Value 형태의 데이터로, 여러 줄로 구성된다.

 

✔️ 요청 헤더 예시

Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
Content-Type: application/json
Authorization: Bearer <토큰>

 


 1.3. 요청 본문 (Request Body)

 

GET 요청에는 보통 본문이 포함되지 않으며, POST, PUT, PATCH 요청에서는 본문을 통해 데이터를 전달한다.

 

✔️ 요청 본문 예시 (application/json)

POST /users HTTP/1.1
Host: example.com
Content-Type: application/json

{
  "username": "kim",
  "password": "securepassword123"
}

 

✔️ 요청 본문 예시 (x-www-form-urlencoded)

POST /users HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded

username=kim&password=securepassword123

 

 

 

 


2. HTTP 응답 메시지

<상태 라인>
<헤더>
<빈 줄>
<본문>

 

 

 2.1. 상태 라인 (Status Line)

 

응답의 첫 번째 줄로, 다음과 같은 형식으로 구성된다.

<HTTP 버전> <상태 코드> <상태 메시지>
  • HTTP 버전: 사용되는 HTTP 프로토콜 버전
  • 상태 코드(Status Code): 요청의 처리 결과를 나타내는 3자리 숫자 (200, 404, 500 등)
  • 상태 메시지: 상태 코드를 설명하는 짧은 메시지 (OK, Not Found 등)

 

✔️ 상태 라인 예시

HTTP/1.1 200 OK

 


 2.2. 응답 헤더 (Response Headers)

 

응답에 대한 추가 정보를 제공하는 Key: Value 형태의 데이터로, 여러 줄로 구성된다.

 

✔️ 응답 헤더 예시

Content-Type: application/json
Content-Length: 1234
Cache-Control: max-age=3600
Set-Cookie: sessionId=abc123; HttpOnly

 


 2.3. 응답 본문(Response Body)

 

서버가 클라이언트에게 전달하는 실제 데이터다.

 

✔️ 응답 본문 예시 (application/json)

{
  "message": "Login successful",
  "user": {
    "id": 123,
    "name": "kim"
  }
}

 

 

 


3. HTTP 메시지의 성능 최적화

 

HTTP 메시지는 효율적인 데이터 전송을 위해 다양한 최적화 기술을 활용한다.

 

🔹 압축

Content-Encoding을 사용하여 응답 본문을 압축해 트래픽을 줄일 수 있다.

 

🔹 캐싱

Cache-Control을 설정하여 동일한 요청을 반복할 필요 없이 클라이언트가 캐싱된 데이터를 사용하도록 할 수 있다.

 

🔹 HTTP/2의 헤더 압축 (HPACK)

중복되는 헤더를 압축하여 전송 비용을 줄일 수 있다.

 

🔹 HTTP/3의 QUIC 프로토콜

TCP 대신 UDP를 활용하여 빠른 연결 설정과 데이터 전송을 가능하도록 한다.

'HTTP' 카테고리의 다른 글

[HTTP] HTTP 헤더  (0) 2025.04.07
[HTTP] 클라이언트가 서버로 데이터를 전송하는 방법  (0) 2025.04.06
[HTTP] HTTP 메서드  (0) 2025.04.06
[HTTP] HTTP 상태 코드  (0) 2025.04.06
[HTTP] HTTP의 주요 특징  (0) 2025.04.01