Network

HTTP 메시지

Reife 2023. 2. 16. 10:52

 

클라이언트는 서버에게 요청(requests), 서버는 클라이언트에게 응답(response)를 보낸다.

요청과 응답은 메시지의 형태로 전송된다. 우리가 티스토리를 구글에서 검색하는 경우를 생각해보자.

구글 검색 창에 티스토리를 검색하면, 사용자(클라이언트)가 구글 서버에 검색 결과를 요청한다. 구글 서버는 데이터와 함께 응답한다. 이때, 도메인 주소는 https://www.google.com/search?q=tistory&hl=ko 일 것이다.

 

HTTP 메시지는 요청, 응답 모두 다음과 같은 형태를 갖는다. 

 

 

HTTP 요청 메시지

GET /search?q=tistory&hl=ko HTTP/1.1
Host: www.google.com

이번 요청 메시지 예시에는 Message Body가 포함되지 않는 것 처럼 보이는데, 요청 메시지도 가질 수 있다.

 

Start-Line

request-line 또는 status-line이라고도 한다.

여기서는 GET /search?q=tistory&hl=ko HTTP/1.1가 이에 해당하는데, 형식은 이러하다.

method(HTTP 메서드) SP request-target(요청 대상) SP HTTP-version CRLF

SP는 공백, CRLF는 줄바꿈을 의미한다.

GET 메서드로 데이터 조회를 요청하는데, 대표적인 메서드로는 GET, POST, PUT, DELETE가 있다.

 

요청 대상은 /search?q=tistory&hl=ko이다.

여기서는 /로 시작하는 절대 경로 search에 q=history, hl=ko 두 가지 쿼리문으로 질의한다.

 

통신하기를 원하는 HTTP 버전은 HTTP/1.1이다.

 

Header

header-field = field-name ":" OWS field-value OWS

SP는 공백, CRLF는 줄바꿈을 의미한다.

대소문자를 구분하지 않고," Host: " 처럼 field-name은 : 문자와 붙여 쓰고, : 문자와 field-value는 띄어써도 무방하다.

Host: www.google.com 과 같이 요청 메시지 헤더를 작성할 수 있다.

 

HTTP 응답 메시지

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length:3423

<html>
	<body>...</body>
</html>

Start-Line

HTTP-version SP status-code SP reason-phrase CRLF

요청 메시지와는 형태가 다르다.

HTTP 버전이 먼저 오고, HTTP 상태 코드, 상태에 대한 이유 문구 순으로 구성된다.

 

HTTP 상태 코드는 요청 성공 또는 실패를 나타내며 다음과 같다.

200: 성공

400: 클라이언트 요청 오류

500: 서버 내부 오류

 

이유 문구는 상태 코드를 사람이 이해할 수 있는 문구로 바꾸어서 표현한 것이다.

 

Header

header-field = field-name ":" OWS field-value OWS

Content-Type: text/html;charset=UTF-8
Content-Length:3423

 

메시지 바디의 내용, 메시지 바디의 크기, 요청 클라이언트 정보, 서버 애플리케이션 정보 등

HTTP 전송에 필요한 모든 부가정보(메타 데이터)가 이곳에 작성된다.

임의의 헤더를 추가하는 것도 가능하다.

 

Message Body

실제로 전송할 데이터를 담는다. HTML 문서, 이미지, 비디오, JSON 등 바이트로 표현할 수 있는 모든 데이터가 포함된다.

 

 


Reference

인프런 모든 개발자를 위한 HTTP 웹 기본 지식 - 김영한