가능세계
[Network] HTTP 메시지(HTTP Message) 구조 파헤치기 본문
HTTP 메시지는 클라이언트와 서버 간에 데이터가 교환되는 방식입니다.
메시지는 두 가지 유형이 있습니다.
- 요청(request): 클라이언트가 서버로 전송하여 서버에서 작업을 실행하도록 요청하는 메시지입니다.
- 응답(response): 서버가 그 요청에 대한 답변을 클라이언트에게 제공하는 메시지입니다.
1. HTTP 메시지 구조
HTTP 요청과 응답 메시지의 구조는 서로 닮았으며, 그 구조는 다음과 같습니다.
HTTP 메시지는 위에서부터 차례대로 시작 라인
(Start Line), 헤더
(Header), 공백 라인
(Empty Line), 바디
(Message Body)로 구성되어 있습니다.
- 시작 라인
시작 라인에는 실행되어야 할 요청, 혹은 수행에 대한 성공 여부가 기록되어 있습니다. - HTTP 헤더
요청 또는 메시지 본문에 대한 설명입니다. HTTP 전송에 필요한 모든 부가 정보를 담고 있습니다. - 빈 줄
공백은 HTTP 메시지 값을 구분하기 위한 라인이므로 반드시 포함되어야 합니다. - 메시지 본문
실제 전송할 데이터가 포함됩니다. HTTP 요청의 종류에 따라 메시지 바디가 있거나 없을 수 있습니다.
2. HTTP 요청 메시지
2-1. 시작 라인(Start Line)
- HTTP 메서드(Method): 서버가 수행해야 할 동작을 지정합니다.
- 요청 대상(Request-target): 일반적으로 URL, 프로토콜, 포트, 도메인의 절대 경로("/")를 나타냅니다. (e.g.
HEAD /test.html?query=alibaba HTTP/1.1
,GET /anypage.html HTTP/1.1
) - HTTP 버전(Version): 사용된 HTTP 버전이 들어갑니다.
2-2. 헤더(Header)
HTTP 요청 헤더에는 HTTP 전송에 필요한 모든 부가 정보가 들어갑니다. 예를 들어, 메시지 크기, 압축 여부, 인증 정보, 브라우저 정보, 서버 정보, 캐시 등이 있습니다.
필요시 임의의 헤더를 추가할 수 있습니다. (e.g. helloworld: hihi)
2-3. 공백 라인(Empty Line)
공백 라인은 헤더와 바디를 구분하기 위한 줄입니다.
3. HTTP 응답 메시지
3-1. 시작 라인(Status Line)
- HTTP 버전(HTTP Version)
- 상태 코드(Status Code): 클라이언트 요청의 성공 여부를 나타냅니다.
- 상태 메시지(Status Message): 상태 코드에 대한 설명을 짧은 글로 나타내어 사람이 쉽게 이해할 수 있도록 합니다.
3-2. 헤더(Header)
HTTP 응답 헤더는 요청 헤더와 동일한 구조를 가지고 있습니다.
3-3. 공백 라인(Empty Line)
공백 라인은 헤더와 바디를 구분하기 위한 줄입니다.
3-4. 메시지 바디(Message Body)
메시지 바디는 실제 전송할 데이터(HTML 문서, 이미지, 영상, JSON 등 byte로 표현 가능한 모든 데이터)를 담고 있습니다.
본문은 응답의 마지막 부분에 들어갑니다. 다만, 모든 응답에 본문이 들어가지는 않습니다.
참고
'Blog > Network' 카테고리의 다른 글
[Network] HTTP 메서드 속성 - 안전성, 멱등성, 캐시 가능성 정리하기 (0) | 2023.09.11 |
---|---|
[Network]HTTP Methods란? HTTP 메서드 종류 알아보기 (0) | 2023.09.11 |
[Network] HTTP란 무엇인가요? 무상태와 비연결성 정리하기 (0) | 2023.09.10 |
[Network] URI vs URL vs URN 차이점 알아보기 (0) | 2023.09.10 |
[Network] UDP란? TCP vs UDP 차이점 살펴보기 (0) | 2023.09.10 |