HTTP는 클라이언트(웹 브라우저 등)가 서버에 요청(Request)을 보내고, 서버가 응답(Response)을 반환하는 방식으로 동작하는 프로토콜이다.
클라이언트가 서버에 특정 리소스를 요청하는 메시지이다.
요청 라인은 HTTP 요청의 가장 첫 번째 줄로, 다음 3가지 요소로 구성된다.
<HTTP 메서드> <요청 대상> <HTTP 버전>
GET → 리소스를 가져옴.POST → 데이터를 서버에 전송.PUT → 기존 리소스를 수정하거나 생성.DELETE → 리소스를 삭제.PATCH → 리소스의 일부만 수정.GET /index.html HTTP/1.1
요청에 대한 추가 정보를 전달하는 key-value 형태의 데이터.
Host: 요청하는 서버의 도메인 (HTTP/1.1에서는 필수).User-Agent: 클라이언트 정보(브라우저, 운영체제 등).Accept: 서버가 응답할 때 어떤 콘텐츠 유형을 보낼지 지정.Authorisation: 인증 토큰(JWT, Basic Auth 등).Cookie: 클라이언트가 저장한 쿠키 데이터.Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
POST /api/login HTTP/1.1
Host: www.example.com
Content-Type: application/json
Content-Length: 34
{
"username": "john",
"password": "1234"
}
서버가 클라이언트의 요청을 처리한 후 반환하는 메시지이다.
응답의 첫 번째 줄로, 다음과 같은 형식이다.
<HTTP 버전> <상태 코드> <상태 메시지>
HTTP/1.1 200 OK
| 코드 | 의미 | 설명 |
|---|---|---|
| 1xx | 정보 | 요청을 처리 중 |
| 2xx | 성공 | 요청이 정상 처리됨 |
| 3xx | 리디렉션 | 요청한 리소스가 이동됨 |
| 4xx | 클라이언트 오류 | 요청이 잘못됨 |
| 5xx | 서버 오류 | 서버에서 요청을 처리하지 못함 |
서버가 응답에 대한 추가 정보를 제공하는 key-value 데이터.
Content-Type: 응답 본문의 데이터 형식(예: text/html, application/json).Content-Length: 응답 본문의 크기(바이트 단위).Set-Cookie: 클라이언트에게 쿠키를 설정하도록 지시.Cache-Control: 캐싱 동작을 제어.Content-Type: text/html
Content-Length: 342
Set-Cookie: sessionId=xyz123; HttpOnly
Cache-Control: no-cache
HTTP/1.1 200 OK
Content-Type: text/html
<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>
HTTP/1.1 200 OK
Content-Type: application/json
{
"message": "Success",
"data": {"id": 1, "name": "Alice"}
}
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0
Accept: text/html
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 125
<html>
<body>
<h1>Welcome to Example.com!</h1>
</body>
</html>