본문 바로가기

CS/네트워크(Network)

HTTP 간단 정리

HTTP(HyperText Transfer Protocol)는 클라이언트와 서버 간의 데이터를 교환하기 위해 만들어진 통신 규약이다.

클라이언트가 서버에게 요청하고, 서버는 그에 맞는 응답을 약속된 구조로 보내는 것

 

위의 개념을 중심으로, HTTP는 아래의 특징들을 가지고 있는 일종의 편지라고 생각하면 된다.

  1. 요청
  2. 응답
  3. 무상태성 
  4. 비연결성

응답과 요청은 우리가 흔히 알고 있는 Request/Response 방식이고,

 

무상태성은 서버가 클라이언트의 상태를 보존하지 않는 것을 의미한다. 이는 동일한 연결 상에서 전달되었다고 하더라도, '이전 요청'과 '다음 요청'이 서로 연관이 없다는 말이다. 이에 대해서는 나중에 다시 다뤄보겠다.

 

비연결성은 클라이언트 요청에 서버가 응답을 완료하면 연결을 종료하는 성질을 말하는데, 이는 Socket 프로그래밍을 try-with-resource 방식으로 구현해본 사람이라면 알 수 있는 내용이다.

 

아무래도 중요한 내용은 HTTP의 요청/응답 구조이니, 아래서 자세히 살펴보겠다.


요청 메시지 (Request Message)

요청 메시지는 공백을 제외하고 3가지 부분으로 나뉜다. (그러나 공백도 반드시 포함되어야 한다. 이점 기억하자 !)

 

  • Start Line (요청라인)
  • Headers (헤더)
  • Body (본분)
GET /index.html HTTP/1.1		// -> start line
Host: example.com
Accept: text/html
Accept-Encoding: gzip, deflate		// -> headers
User-Agent: Chrome
                            		// -> 공백
hl=ko&ogbl=0&page=99			// -> body
...

start line (요청 라인)

요청 메시지의 시작 라인이고, 3가지 부분으로 구성되어있다.

  1. HTTP method : 요청 방식
  2. Request target : URL 경로
  3. HTTP version : 프로토콜 버전
GET /test.html HTTP/1.1
[HTTP Method] [Request target] [HTTP version]

headrs (헤더)

해당 요청에 대한 추가 정보를 담고 있는 부분이다. (브라우저 종류, 인증 토큰, 요청 메시지 body의 총 길이 등) 이 헤더에 포함된다.

Host: example.com
Accept: text/html
Accept-Encoding: gzip, deflate
User-Agent: Chrome
...

body (본문)

요청 메시지의 데이터를 담고 있는 부분인데, 보통 POST 요청일 때, 폼 데이터가 key-value 형태로 들어가있다.

{
    "test_id": "tmp_1234567",
    "order_id": "8237352"
}

응답 메시지 (Response Message)

응답 메시지도 요청 메시지와 동일하게 공백을 제외하고 3가지 부분으로 나뉜다.

  • Status Line (상태 라인)
  • Headers (헤더)
  • Body (본분)
HTTP/1.1 200 OK
Content-Type: text/html

<html>...</html>

status line (상태라인)

응답 상태를 나타내는 부분인데, 이것도 요청 메시지와 동일하게 3부분으로 구성되어 있다.

  1. HTTP version : 프로토콜 버전
  2. Status Code : 상태 코드 (1xx, 2xx, 3xx, 4xx, 5xx)
  3. Status Text : 상태 메시지
HTTP/1.1 200 OK
[HTTP version] [Status Code] [Status Text]

header, body 는 요청 메시지와 동일

'CS > 네트워크(Network)' 카테고리의 다른 글

[Socket] 소켓 기본 개념과 TCP 이해  (0) 2025.03.21