본문 바로가기
Programming

[Network] HTTP Message Request Response 동작 이해하기

by 개발자 염상진 2022. 5. 20.

 

 

HTTP(HyperText Tranfer Protocol)

 

HTTP는 HTML문서를 전송하기 위해 OSI 7계층의 가장 상위에 이는 애플리케이션 계층에서 동작하는 프로토콜이다. 전통적인 Client-Server 패턴에서 Client가 HTTP Message 양식에 맞춰 요청을 보내면 Server는 이에 맞는 자원을 반환하게 된다. HTTP 프로토콜은 특정 상태를 유지하지 않는다. 

 

HTTP Message 구조

Clent와 Server 사이의 데이터를 교환하는 방식이다. HTTP Message는 Request 유형과 Response 유형으로 구분된다. request나 response 모두 동일한 구조를 가지고 있다. 

 

 

HTTP Message는 크게 헤더(Header)와 payload인 body로 구분된다. 

① start-line : Reqest 혹은 Response 상태를 나타낸다. 항상 HTTP Message의 가장 처음에 위치한다.

② HTTP headers : 요청을 지정하거나 본문을 설명하는 헤더의 집합이다.

③ Empty Line : 헤더와 본문을 구분하는 공간이다.

④ body : 요청에 관한 데이터 혹은 응답에 관한 데이터를 포함한다. 

 

 

HTTP Request

 

HTTP Request

 

start line

클라이언트 입장에서 서버에 보내는 메시지다. start line은 세 부분으로 구성된다.

① 수행할 작업을 표현하는 메소드(GET, PUT, POST, DELETE)나 방식(HEAD, OPTION)을 설명하는 HTTP 메소드를 나타낸다. 즉, 메시지가 어떤 작업을 해야 하는지 표시한다.

② 일반적으로 URL 혹은 URI등의 요청대상이 붙는다.

③ HTTP 버전

 

Headers

문자열과 값을 콜론(:)으로 구분한다. Headers도 3가 부분으로 나뉜다.

Request Headers : User-Agent / Accept-Language 등의 헤더는 요청 정보를 구체화시킨다. 컨텍스트를 제공하거나 If-None 조건 등의 제약사항을 추가할 수 있다.

General Headers : 메세지 전체에 적용된다.

Entity Headers : Content-Length 등은 body에 적용된다. body가 빈 경우에는 Entity Header는 전송되지 않는다.

 

Body

요청의 데이터는 HTTP Message 마지막에 위치한다. GET / DELETE 등의 메소드는 body를 가지지 않는다.

① 단일 리소스 본문(Single-resource bodies) : 헤더 2개(Content-Type, Content-Length)로 정의된 단일파일

② 다중 리소스 본문(Multiple-resource bodies) : 여러 파트로 본문이 구성되며 각 파트별로 다른 정보가 구성됨.

 

 

HTTP Response

 

HTTP Response는 서버에서 생성되어 클라이언트에 제공된다. 

HTTP Response

 

start line

응답의 첫 줄에 start line이 추가된다. 현재 프로토콜 버전(HTTP/1.1), 상태 코드(200,404, 502 등등), 상태 텍스트(OK, Not Found 등)을 나타낸다.

 

Headers

HTTP Request와 동일한 구조를 가지고 있다. 

① General headers : 메시지 전체에 적용됨

② Response headers : Vary,  Accept-Ranges 등 상태 줄에 넣기에 공간이 부족했던 추가적인 정보

③ Entity headers : Content-Encoding, Content-Type, Content-Length등은 body에 적용된다. body가 존재하지 않는 경우 전송되지 않는다.

 

Body

응답의 본문은 HTTP Message 구조의 마지막에 위치한다. 201, 204 등의 상태는 body가 존재하지 않지만 200 처럼 성공적인 응답 상태에서는 body가 존재한다.

① 단일 리소스 본문(Single resource bodies) : 길이가 알려진 단일 리소스 본문은 2개의 헤더(Content-Type, Content-Length)로 구성. 길이가 알려지지 않은 단일 파일로 구성된 단일 리소스 본문은 파일은 chunked로 나뉘어 인코딩 됨

② 다중 리소스 본문(Multiple resource bodies) : 서로 다른 정보를 가지고 있는 body

 

 

HTTP의 한계 stateless

 

HTTP가 일반적으로 사용되지만 단점도 존재한다. HTTP로 클라이언트와 서버가 통신하는 과정에서 HTTP는 클라이언트나 서버의 상태를 체크하지 않는다. 내가 방문한 사이트 혹은 내가 본 영상을 참조해서 추천 알고리즘이 작동하기 위해서는 사용자 혹은 서버의 상태가 저장되어야 한다.

 

하지만 HTTP는 통신 규약일 뿐이므로 클라이언트 혹은 서버의 상태를 저장하지 않고 추적하지도 않는다. 따라서 통신상에서 클라이언트 혹은 서버의 상태를 저장하기 위해서는 쿠키, 세션, API등의 방식을 사용해야 한다.

 

 

 

[Network] URI vs URL ?

흔히 웹 브라우저를 사용할 때 주소창에 자원의 위치를 나타내는 URL을 입력하여 특정 웹 페이지로 이동하는 경우가 많다. 웹 상의 모든 페이지들은 각자의 URL을 가지고 있고, 손쉽게 자원을 찾

about-tech.tistory.com

 

 

 

Reference

댓글