response, request

김은상·2022년 7월 23일
0

1. HyperText Transfer Protocol

하이퍼텍스트(HTML) 문서를 교환하기 위해 만들어진 protocol(통신 규약).
즉 웹상에서 네트워크로 서버끼리 통신을 할때 어떠한 형식으로 서로 통신을 하자고 규정해 놓은 "통신 형식" 혹은 "통신 구조" 라고 보면 된다.
프론트앤드 서버와 클라이언트간의 통신에 사용된다.
또한 백앤드와 프론트앤드 서버간에의 통신에도 사용된다.
HTTP는 TCP/IP 기반으로 되어있다.

2. HTTP 핵심 요소

2-1. HTTP 통신 방식

  • HTTP 기본적으로 요청/응답 (request/response) 구조로 되어있다.
    클라이언트가 HTTP request를 서버에 보내면 서버는 HTTP response를 보내는 구조.
    클라이언트와 서버의 모든 통신이 요청과 응답으로 이루어 진다.

  • HTTP는 Stateless 이다.
    Stateless 란 말그대로 state(상태)를 저장하지 않는 다는 뜻.
    즉, 요청이 오면 그에 응답을 할뿐, 여러 요청/응답 끼리 연결되어 있지 않다는 뜻이다. 즉 각각의 요청/응답은 독립적인 요청/응답 이다.
    예를 들어, 클라이언트가 요청을 보내고 응답을 받은후, 조금 있다 다시 요청을 보낼때, 전에 보낸 요청/응답에 대해 알지 못한다는 뜻이다.
    그래서 만일 여러 요청과응답 의 진행과정이나 데이터가 필요할때는 쿠키나 세션 등등을 사용하게 된다.

2-2. HTTP Request 구조

HTTP request 메세지는 크게 3부분으로 구성된다:

  • start line
  • headers
  • body

Start line

  • HTTP Method
    해당 request가 의도한 action을 정의하는 부분.
    HTTP Methods에는 GET, POST, PUT, DELETE, OPTIONS 등등이 있다. 주로 GET 과 POST과 쓰임.
  • Request target
    해당 request가 전송되는 목표 uri. 예를 들어 /login.
  • HTTP Version
    말 그대로 사용되는 HTTP 버젼. 버젼에는 1.0, 1.1, 2.0 등이 있다.

Headers

  • 해당 request에 대한 추가 정보(addtional information)를 담고 있는 부분. 예를 들어, request 메세지 body의 총 길이 (Content-Length) 등.
  • Key:Value 값으로 되어있다 (: 이 사용됨).

    key:value
    HOST: google.com => Key = HOST, Value = google.com

  • Headers도 크게 3부분으로 나뉘지만(general headers, request headers, entity headers) 너무 자세한 부분임으로, 3부분 으로 구성되어 있다는것만 알고 있어도 괜찮다.

자주 사용되는 header 정보에는 다음이 있다:

  • Host
    요청이 전송되는 target의 host url: 예를 들어, google.com

  • User-Agent
    요청을 보내는 클라이언트의 대한 정보: 예를 들어, 웹브라우저에 대한 정보.

  • Accept
    해당 요청이 받을 수 있는 응답(response) 타입.

  • Connection
    해당 요청이 끝난후에 클라이언트와 서버가 계속해서 네트워크 컨넥션을 유지 할것인지 아니면 끊을것인지에 대해 지시하는 부분.

  • Content-Type
    해당 요청이 보내는 메세지 body의 타입. 예를 들어, JSON을 보내면 application/json.

  • Content-Length:
    메세지 body의 길이.

Body

  • 해당 reqeust의 실제 메세지/내용.
    Body가 없는 request도 많다.
    예를 들어, GET request들은 대부분 body가 없는 경우가 많음.

2-3. HTTP Response 구조

Response도 request와 마찬가지로 크게 3부분으로 구성되어 있다.

  • Status line
  • Headers
  • Body

Status Line

Response의 상태를 간략하게 나타내주는 부분.
3부분으로 구성되어 있다.

  • HTTP 버젼
  • Status code: 응답 상태를 나타내는 코드. 숫자로 되어 있는 코드.
    예를 들어, 200
  • Status text: 응답 상태를 간략하게 설명해주는 부분.
    예를 들어, "Not Found"

    HTTP/1.1 404 Not Found

Headers

  • Response의 headers와 동일하다.
  • 다만 response에서만 사용되는 header 값들이 있다.
  • 예를 들어, User-Agent 대신에 Server 헤더가 사용된다.

Body

  • Response의 body와 일반적으로 동일하다.
  • Request와 마찬가지로 모든 response가 body가 있지는 않다. 데이터를 전송할 필요가 없을경우 body가 비어있게 된다.


HTTP 간단 예시

HTTP는 곧 컴퓨터사이의 소통이다. 이때 요청과 응답으로 이루어져있는 것이 핵심이다.

  • 유튜브에 BTS를 검색하면 👉🏻 요청(GET), 브라우저

  • BTS 관련영상 목록이 나온다 👉🏻 응답, 서버

  • 영상밑에 댓글을 적고 작성버튼을 누른다 👉🏻 요청(POST), 브라우저

  • 댓글란에 내 댓글이 달린다 👉🏻 응답, 서버

2. Stateless

State(상태) + less(없음)

각각의 HTTP 통신(요청/응답)은 독립적이다. 따라서 과거의 통신(요청/응답)에 대한 내용을 전혀 알지 못한다.
예를들어 한 사이트에 로그인을 했을 때 한번 받은 로그인정보는 다음 통신에서 지워지는 것이다.

☝🏻 그렇다면 어떻게 로그인한 상태가 지속되는 걸까?

우리가 로그인을 하면 서버에서 '토큰(token)'이란 것을 발급해준다. 이것을 로컬스토리지나 브라우저에 저장한 후, 다음 통신 때 서버에 토큰을 같이 넘겨주는 것이다.

이러한 로그인 정보와같이 여러번의 통신과정에서 '연속된 데이터 처리'가 필요한경우를 위해 토큰이나 쿠키 로컬스토리지 같은 기술이 만들어졌다.

Request

  • Start Line

HTTP Method: GET/POST/ DELETE, body에 담긴 내용을 백엔드에서 어떻게 처리할지
Request target: 요청을 어디로 보낼 건지, 목표 url.
HTTP Version: HTTP 버전
GET /login HTTP/1.1
GET메소드로 login 이라는 주소에 HTTP 1.1버전으로 요청할 것.

  • 🍌 Headers

해당요청의 추가정보를 담고있다.
body에 들어가는 값의 type(ex. JSON)이나 로그인 토큰 등등.

  • 🍌 Body

실제 보내는 데이터 내용.
예) 로그인 요청

Body: {
"user_email": "jun.choi@gmail.com"
"user_password": "wecode"
}
☝🏻 요청의 메소드에 따라 body가 없을 수 도 있다. (응답도 마찬가지)

Response

  • 🍌 Start Line

HTTP Version : 요청의 것과 동일
Status Code : 응답 메세지의 상태 코드
Status Text : 응답 메세지의 상태를 간략하게 설명해주는 텍스트
HTTP/1.1 404 Not Found
HTTP 1.1 버전으로 응답하고 있는데, 프론트엔드에서 보낸 요청(ex. 로그인 시도)에 대해서 유저의 정보를 찾을 수 없기 때문에 404 Not Found 상태 메세지를 보낸다.

  • 🍌 Headers

  • 🍌 Body

예) 로그인요청에 성공했을 때 응답

Body: {
	"message": "SUCCESS"
	"token": "kldiduajsadm@9df0asmzm" (암호화된 유저의 정보)
}
profile
Flutter 시작

0개의 댓글