HTTP 응답 메세지의 구성
HTTP 응답 메세지는 다음과 같은 형태로 구성된다.
[HTTP 버전] [응답 상태 코드] [상태 메세지]
[헤더]
[빈 줄]
[메세지 바디]
각 항목에 대한 설명은 다음과 같다.
- HTTP 버전: HTTP의 버전을 나타낸다. HTTP/0.9, HTTP/1.0, HTTP/1.1, HTTP/2.0 등이 될 수 있다.
- 응답 상태 코드: 100번대부터 500번대의 응답 코드를 나타낸다. 예를 들어 200이라면, 요청이 성공했다는 것을 뜻한다.
- 상태 메세지: 상태 메세지를 나타낸다. 예를 들어 상태 코드가 200번이라면 OK 같은 메세지를 전송할 수 있다. 상태 메세지는 없을 수도 있다.
- 헤더: 헤더에는 메세지 바디를 통해 전달할 콘텐츠의 MIME 타입(Content-Type), 콘텐츠의 길이(Content-Length) 등이 들어가, 응답 메세지를 받는 측에서 메세지를 읽을 수 있도록 도와준다.
- 빈 줄: 빈줄은 CRLF(Carriage Return Line Feed)라고도 부르며 줄바꿈을 표시한다. 헤더와 메세지 바디 사이에 빈 줄을 둠으로써 헤더 섹션이 끝났음을 명확히 하는 역할을 한다.
- 메세지 바디: 메세지 바디에는 콘텐츠가 들어간다. 만약 헤더에 들어간 Content-Type값이 text/html이라면, 메세지 바디에는 html문서가 들어가며, 만약 Content-Type 값이 text/plain이라면, 메세지 바디에는 순수 텍스트 데이터가 들어간다.
이 설명만으로는 어떻게 응답이 오는지 알아보기 힘들다. 아래에서 우리가 가장 많이 사용하는 '일반적인 웹페이지의 응답'과 'REST API를 사용할 때의 응답' 두가지를 살펴보며 어떤 방식으로 응답 메세지가 생성되는지 한 번 살펴보자.
HTTP 응답 메세지 예시
일반적인 웹페이지
한 번 일반적인 웹페이지에 접근할 때의 응답 메세지를 살펴보자.
만약 HTTP 요청이 성공하였고(응답 코드: 200), 응답 메세지에 들어갈 Content-Type값이 text/html이라면, 다음과 같은 형태의 응답 메세지가 가게 된다.
HTTP/1.1 200 OK
Date: Mon, 25 Feb 2024 12:34:56 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 1234
<html>
<head>
...
</head>
<body>
...
</body>
</html>
*예시를 위해 임의로 만든 응답 메세지 입니다.
실제로 크롬 브라우져에서 F12를 누르고 개발자 창을 켠 후, https://kotlinworld.com/ 에 접근하면 다음과 같은 응답이 오는 것을 볼 수 있다. Content-Type이 text/html이고 Response Body로 html 파일이 온다.
REST API
만약 우리가 REST API 서버를 구성했고, 해당 서버에 이 블로그에 대한 정보를 요청한다고 생각해보자.
HTTP 요청이 성공하였고(응답 코드: 200), 응답 메세지에 들어갈 Content-Type값이 application/json이라면, 다음과 같은 형태의 응답 메세지가 만들어진다.
HTTP/1.1 200 OK
Date: Mon, 25 Feb 2024 12:34:56
Content-Type: application/json; charset=UTF-8
Content-Length: [콘텐츠 길이]
{
"blog": "Seyoung's Kotlin World",
"url": "https://kotlinworld.com/",
"isActive": true
}
*예시를 위해 임의로 만든 응답 메세지 입니다.
정리
이 두가지 예시를 통해 볼 수 있듯이
- 첫 째 줄에는 무조건 [HTTP 버전], [응답 상태 코드], [상태 메세지]가 띄워쓰기로 구분되어 나타나며,
- 둘 째 줄부터 빈 줄 전까지는 모두 [헤더] 영역이고, 이 영역에서는 메세지 바디에 어떤 콘텐츠 데이터가 들어가지는지, 메세지 바디의 길이는 얼마인지에 대한 정보를 비롯해 응답 시간 등의 다양한 정보를 포함한다.
- 빈 줄 다음부터는 모두 [메세지 바디]가 되며, 콘텐츠에 대한 정보가 들어간다.
반응형