TIL7 - HTTP 구조 및 핵심 요소(2/2)

Kiyong Lee·2021년 7월 30일
0

목록 보기
3/12

HTTP 요청 구조

HTTP 요청은 아래와 같은 형태로 되어 있다.

POST /payment-sync HTTP/1.1 -- (1)

Accept: application/json             -- (2)
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-length: 83
Content-type: application/json
Host: intropython.com
User-Agent: HTTPie/0.9.3

{                                                     -- (3)
         "imp_uid": "imp_1234567890",
         "merchant_uid": "order_id_8237352",
         "status": "paid"
}

요청 구조는 크게 세 부분으로 분류되어 있다.

(1) : start line
(2) : headers
(3) : body

물론, 응답/요청 메시지를 우리가 모든 부분을 직접 타이핑을 하지 않고,
플라스크나 장고가 알아서 처리해준다.

Start Line

말 그대로 HTTP 요청의시작 줄이며, HTTP 메소드/request target/버전
이 3가지로 구성되어 있다.

1️⃣ HTTP 메소드
HTTP 요청이 의도하는 액션을 정의하는 부분이다.
서버로부터 데이터를 받고자 한다면 'GET' 요청을 보내고,
서버에 새로운 데이터를 저장하고자 한다면 'POST' 요청을 보낸다.

2️⃣ Request Target
HTTP 요청이 전송되는 목표 주소를 말한다.

3️⃣HTTP version
해당 요청의 HTTP 버전을 뜻한다.
버전을 명시하는 이유는 버전에 따라 요청 메시지의 구조나 데이터가 약간씩
다를 수 있기 때문이다.

Header

헤더 정보는 HTTP 요청 그 자체에 대한 정보를 담고 있다.
헤더는 파이썬의 dictionary 처럼 key-value로 이루어져 있어서
key: value 형태로 표현된다.

1️⃣ Host
요청이 전송되는 target의 호스트의 URL 주소를 알려주는 헤더이다.
EX. HOST: google.com

2️⃣ User-Agent
요청을 보내는 클라이언트에 대한 정보 : 예를 들어, 웹 브라우저에 대한 정보
EX. User-Agent: Mozilla/5.0

3️⃣Accept
해당 요청이 받을 수 있는 응답 body 데이터 타입을 알려 준다.
MIME 타입이 value로 지정된다.
모든 데이터 타입을 허용하는 경우에는 / 로 지정해주면 된다.
EX. Accept: application/json
Accept: /

MIME(Multipurpose Internet Mail Extenntions)
클라이언트에게 전송된 문서의 다양성을 알려주기 위한 매커니즘
https://developer.mozilla.org/ko/docs/Web/HTTP/Basics_of_HTTP/MIME_types

4️⃣Connection
해당 요청이 끝난 후, 클라이언트와 서버가 계속해서 네트워크 연결을
유지할 것인지, 끊을 것인지 알려주는 헤더이다.
EX. Connection: keep-alive
Connection: close

5️⃣Content-Type
HTTP 요청이 보내는 body 타입을 알려주는 헤더이다.
Accept와 마찬가지로 MIME 타입이 사용된다.
EX. Content-Type: application/json

6️⃣Content-Length
HTTP 요청이 보내는 body 사이즈를 알려주는 헤더이다.
EX. Content-Length: 257

Body

HTTP 요청이 전송하는 데이터를 담고 있는 부분이다.
전송 데이터가 없다면 body 부분은 비어 있게 된다.


HTTP 응답 구조

HTTP 응답 구조는 요청 구조처럼 크게 3가지로 구성되어 있다.

HTTP/1.1 404 Not Found  -- (1)

Connection: close             -- (2)
Content-Length: 1573
Content-Type: text/html; charset=UTF-8
Date: Mon, 20 Aug 2018 09:32:14 GMT

< !DOCTYPE html; >         -- (3)

응답 구조는 크게 세 부분으로 분류되어 있다.

(1) : status line
(2) : headers
(3) : body

Status Line

HTTP 응답 메시지의 상태를 간략하게 요약하여 알려준는 부분이다.
EX. HTTP/1.1 404 Not Found
(1) (2) (3)

1️⃣ HTTP 버전
요청 메시지의 버전과 마찬가지로 사용되는 버전을 말한다.

2️⃣Status Code
HTTP 응답 상태를 미리 지정되어 있는 숫자로 된 코드로 나타내준다.

3️⃣Status Text
응답 상태를 간략하게 글로 설명해주는 부분이다

Header

요청의 헤더 부분과 동일하다.
다만 User-Agent 부분에 Server 가 사용된다.

Body

HTTP 요청이 전송하는 데이터를 담고 있는 부분이다.
전송 데이터가 없다면 body 부분은 비어 있게 된다.

출처 : 깔끔한 파이썬 탄탄한 백엔드

profile
ISTJ인 K-개발자

0개의 댓글