티스토리 뷰

study/Web

HTTP 통신 구조

xoxowo 2022. 7. 19. 23:16

Django로 회원가입 및 로그인 API를 만들고 임의로 httpie를 사용하여 API의 성공 여부를 확인했었는데, 이 HTTP 통신구조에 대해 좀더 알아보았다.

 

HTTP ( HyperTextTransferProtocal)

간략하게 정의해보면 클라이언트와 서버 사이에서 어떻게 메세지를 교환할지 정해놓은 규칙이며,  요청(requests)와 응답(responses)로 구성되어있다. 중요한 점은 이 HTTP는 무상태 프로토콜인데, 서버가 클라이언트의 상태를 보존하지 않는 즉, Stateless특징을 가지고 있다.  

 

→ Stateless (무상태)

     서버가 클라이언트의 상태를 저장하지 않기 때문에 아무 서버나 호출할 수 있음

     서버는 단순히 요청이 오면 응답만 보내는 역할만 수행함

     만약, 서버 장애가 발생해도 다른 서버에서 응답을 해주면되므로 상관이 없음 ☞ 즉 스케일 아웃이 유리함(수평확장)

 

→ Stateful (상태유지)

    서버가 클라이언트의 상태를 저장하기 때문에 항상 같은 서버가 유지되어야함

    만약, 서버 장애가 발생하면 해당 서버를 접속하고 있던 유저의 상태가 소실됨

 

구조

HTTP는 요청(Request)와 응답(Response)로 구성되어있어, 클라이언트가 요청을하면 서버가 응답하는 구조로 되어있다.

 

 

Request 메세지 구조

 

Start Line 클라이언트 요청의 첫번째 줄이며, 세부분으로 구성되어있다.

Headers  해당 요청에 대한 추가 정보(메타 데이터)를 담고있는 부분

Body 해당 요청에 대한 실제 정보(메타 데이터)를 담고있으며, 주로 body에 내용이 담겨있다면 POST 메소드가많다.

# start line
POST /users/signup HTTP/1.1. 
# Header
Accept: application/json, */*;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 83
Content-Type: application/json
Host: 127.0.0.1:8000
User-Agent: HTTPie/3.2.1
# body
{
    "name": "카레",
    "phone_number": "0001"
}

 

Response 메시지 구조

 

Status Line 클라이언트의 요청에 대한 처리상태를 알려주면서 시작한다.

Headers request의 헤더와 동일하며, 응답의 추가 정보를 담고있다.

Body 요청의 메소드에 따라 Body가 항상 존재하지 않듯이 응답도 응답의 형태에 따라 데이터를 전송할 필요가 없는 경우엔 Body가 없을 수도 있다.

 

# Status Line
HTTP/1.1 400 Ba Request
# Headers
Content-Length: 24
Content-Type: application/json
Cross-Origin-Opener-Policy: same-origin
Date: Sun, 10 Jul 2022 11:25:07 GMT
Referrer-Policy: same-origin
Server: WSGIServer/0.2 CPython/3.8.13
Vary: Origin
X-Content-Type-Options: nosniff
X-Frame-Options: DENY
# Body
{
    "message": "KEY_ERROR"
}

 


내용 전문 및 출처 - 나무위키, MDN, 생활코딩

'study > Web' 카테고리의 다른 글

디자인 패턴 - 팩토리 패턴 (factory pattern)  (0) 2022.10.06
디자인 패턴 - 싱글톤 패턴 (singleton pattern)  (0) 2022.10.06
Mqtt protocol  (0) 2022.08.29
CSS- display, position  (0) 2022.06.22
Semantic Web과 Semantic Tag  (0) 2022.06.21
댓글