HTTP Messages
1. HTTP란?
HTTP(HyperText Transfer Protocol)는 클라이언트(웹 브라우저)와 서버 간의 통신을 담당하는 프로토콜입니다. HTTP는 웹 페이지, 이미지, 비디오와 같은 다양한 리소스를 요청하고 응답하는 데 사용되며, HTTP 메시지는 이러한 통신을 위한 기본 단위입니다. HTTP 메시지는 크게 **요청(request)**과 응답(response) 메시지로 나뉩니다.
2. HTTP 요청 메시지 구조
HTTP 요청 메시지는 클라이언트(브라우저)가 서버로 데이터를 요청할 때 사용되는 메시지입니다. 요청 메시지는 세 가지 주요 요소로 구성됩니다.
2.1 HTTP 요청 메시지의 구조
- 요청 줄(Request Line): 요청의 메서드, 요청 대상 URL, 그리고 HTTP 버전을 포함합니다.
- 헤더(Header): 요청에 대한 추가 정보(클라이언트 정보, 콘텐츠 유형 등)를 제공합니다.
- 본문(Body): 선택적 요소로, 주로 POST와 PUT 요청에서 서버로 전송할 데이터를 포함합니다.
HTTP 요청 메시지 예시:
vbnet
코드 복사
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Accept: text/html
예시 설명:
GET
: 요청 메서드./index.html
: 요청 URL 경로.HTTP/1.1
: HTTP 버전.- 헤더에는 호스트, 사용자 에이전트, 수락 가능한 콘텐츠 형식 등이 포함됩니다.
- 본문은 주로 POST나 PUT 요청에 포함되며, GET 요청에는 포함되지 않습니다.
주요 HTTP 요청 메서드:
메서드 | 설명 |
---|---|
GET | 서버에서 리소스를 요청할 때 사용. |
POST | 서버로 데이터를 제출할 때 사용. |
PUT | 서버에 데이터를 생성하거나 업데이트할 때 사용. |
DELETE | 서버에서 리소스를 삭제할 때 사용. |
HEAD | GET 요청과 동일하지만 응답 본문을 반환하지 않음. |
OPTIONS | 서버에서 사용할 수 있는 HTTP 메서드 옵션을 확인할 때 사용. |
3. HTTP 응답 메시지 구조
HTTP 응답 메시지는 서버가 클라이언트의 요청에 대한 결과를 반환할 때 사용됩니다. 응답 메시지도 세 가지 주요 요소로 구성됩니다.
3.1 HTTP 응답 메시지의 구조
- 상태 줄(Status Line): 서버의 응답 상태 코드와 응답 메시지를 포함합니다.
- 헤더(Header): 응답에 대한 추가 정보(콘텐츠 유형, 서버 정보 등)를 제공합니다.
- 본문(Body): 요청된 리소스의 실제 콘텐츠(예: HTML 문서, 이미지 등)를 포함합니다.
HTTP 응답 메시지 예시:
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 138
<html>
<head>
<title>Welcome to Example</title>
</head>
<body>
<h1>Hello, World!</h1>
</body>
</html>
예시 설명:
HTTP/1.1
: 응답이 HTTP 1.1 프로토콜을 사용하고 있음을 의미.200 OK
: 상태 코드와 메시지. 200은 성공적인 응답을 의미.- 헤더에는 응답 콘텐츠의 유형과 길이가 포함됩니다.
- 본문은 HTML 문서의 내용입니다.
4. HTTP 상태 코드
HTTP 응답 메시지에는 서버의 상태를 나타내는 상태 코드가 포함됩니다. 상태 코드는 세 자리 숫자로, 요청이 성공적으로 처리되었는지, 리소스가 존재하지 않는지, 오류가 발생했는지를 나타냅니다.
주요 HTTP 상태 코드:
상태 코드 | 설명 |
---|---|
200 OK | 요청이 성공적으로 처리되었습니다. |
201 Created | 새로운 리소스가 생성되었습니다. |
204 No Content | 요청이 성공했으나, 본문 데이터가 없습니다. |
301 Moved Permanently | 요청된 리소스가 영구적으로 이동되었습니다. |
302 Found | 요청된 리소스가 임시적으로 다른 위치에 있습니다. |
400 Bad Request | 잘못된 요청입니다. 클라이언트 오류입니다. |
401 Unauthorized | 인증이 필요합니다. |
403 Forbidden | 서버가 요청을 거부했습니다. |
404 Not Found | 요청된 리소스를 찾을 수 없습니다. |
500 Internal Server Error | 서버에 오류가 발생했습니다. |
503 Service Unavailable | 서버가 일시적으로 사용할 수 없습니다. |
5. HTTP 헤더
HTTP 헤더는 요청과 응답 메시지에 추가 정보를 전달하는 중요한 부분입니다. 헤더는 클라이언트와 서버 간의 통신을 더 상세하게 설정할 수 있도록 돕습니다.
주요 HTTP 헤더:
헤더 | 설명 |
---|---|
Host | 요청하는 서버의 호스트 이름을 지정합니다. |
User-Agent | 요청을 보내는 클라이언트(브라우저, 애플리케이션) 정보를 나타냅니다. |
Content-Type | 본문에 포함된 데이터의 MIME 타입을 지정합니다. |
Authorization | 서버에 인증 정보를 제공할 때 사용됩니다. |
Cookie | 클라이언트가 서버로 쿠키 데이터를 전송할 때 사용됩니다. |
Cache-Control | 클라이언트나 서버의 캐시 동작을 제어합니다. |
Accept | 클라이언트가 수신할 수 있는 데이터 유형을 지정합니다. |
6. HTTP 메시지 예시
6.1 GET 요청 메시지 예시
GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
Accept: text/html
6.2 POST 요청 메시지 예시
POST /submit-form HTTP/1.1
Host: www.example.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 32
username=user&password=pass123
6.3 HTTP 응답 메시지 예시 (성공적인 응답)
HTTP/1.1 200 OK
Content-Type: text/html
Content-Length: 123
<html>
<body>
<h1>Welcome to Example</h1>
</body>
</html>
6.4 HTTP 응답 메시지 예시 (404 오류)
HTTP/1.1 404 Not Found
Content-Type: text/html
Content-Length: 57
<html>
<body>
<h1>404 Not Found</h1>
</body>
</html>
7. 브라우저 호환성
HTTP 프로토콜은 모든 브라우저와 서버가 지원하는 표준 프로토콜입니다. 모든 최신 브라우저는 HTTP 메시지 형식에 따라 서버와 통신할 수 있습니다.
브라우저 | HTTP 지원 여부 |
---|---|
Chrome | Yes |
Firefox | Yes |
Safari | Yes |
Edge | Yes |
Internet Explorer | Yes |