[Session] HTTP & RESTful HTTP API

Danbi Cho·2020년 5월 3일
0

Session

목록 보기
9/9

📌 What You Will Learn
1. HTTP란?
2. Request? Response?
3. headers와 body의 역할?
4. Method란?
5. Status-code 들은 무엇이 있을까요?
6. RESTful HTTP API는 무엇일까요?
7. 올바른 end-point 주소는 어떻게 작성할까요?

HTTP

  • HyperText Transfer Protocol
    하이퍼텍스트(HTML) 문서를 교환하기 위해 만들어진 protocol(통신 규약)
  • 웹상에서 네트워크로 서버끼리 통신을 할 때 어떤 형식으로 통신을 할지 정해 놓은 통신 형식 또는 통신 구조
  • 프론트엔드 서버와 클라이언트 간의 통신에 사용된다.
  • 백엔드와 프론트엔드 서버간의 통신에도 사용된다.

HTTP 핵심 요소

HTTP 통신 방식

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

  • HTTP는 Stateless이다.
    • 상태를 저장하지 않는다.
    • 요청이 오면 요청에 응답만 하고, 여러 요청 / 응답끼리 연결되어 있지 않다. 각각의 요청 / 응답은 독립적인 요청 / 응답이다.
    • 그 전에 어떤 통신이 있었는지 알지 못한다. (같은 요청을 반복)
      그래서 생기는 문제 => 로그인이 된 상태를 알지 못하기 때문에 계속 새롭게 로그인 해야 한다.
    • 과거의 로그인 정보(필요한 정보)를 요청할 때 첨부해서 보낸다. 로그인했던 상태를 브라우저가 쿠키에 저장해 놨다가 요청할 때 함께 보낸다.
      쿠키(필요한 정보를 파일에 저장)
    • 만일 여러 요청과 응답의 진행 과정이나 데이터가 필요할 때는 쿠키나 세션 등을 사용한다.

HTTP Request 구조

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

  • start line
  • headers
  • body

Start Line

  • HTTP request의 start line또한 3부분으로 구성되어 있다

    GET /search HTTP/1.1

HTTP Method

  • 해당 request가 의도한 action을 정의하는 부분.
  • HTTP Methods에는 GET, POST, PUT, DELETE, OPTIONS 등등이 있다.
    주로 GET 과 POST과 쓰임.
  • get: 데이터를 달라고 사용하는 요청 / post: 데이터를 생성해달라는 요청

Request target (요청을 받을 주체)

  • 해당 request가 전송되는 목표 uri.
  • 예를 들어 /login.

HTTP Version

  • 말 그대로 사용되는 HTTP 버젼. 버젼에는 1.0, 1.1, 2.0 등이 있다.

Headers (meta정보)

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

자주 사용되는 header 정보

  • Host
    요청이 전송되는 target의 host url (ex. google.com)
    Host + target URL = 정확한 주소 (ex. google.com/search)
  • User-Agent
    요청을 보내는 클라이언트의 대한 정보: 예를 들어, 웹브라우저에 대한 정보.
  • Accept
    해당 요청이 받을 수 있는 응답(response) 타입.
  • Connection
    해당 요청이 끝난후에 클라이언트와 서버가 계속해서 네트워크 컨넥션을 유지 할것인지 아니면 끊을것인지에 대해 지시하는 부분.
  • Content-Type
    해당 요청이 보내는 메세지 body의 타입.
    예를 들어, JSON을 보내면 application/json.
  • Content-Length:
    메세지 body의 길이.

body(실제 제이터가 들어 있다)

  • 해당 request의 실제 메세지 / 내용
  • Body가 없는 요청이 있을 수도 있다. (대부분 Get request)
POST /payment-sync HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate
Connection: keep-alive
Content-Length: 83
Content-Type: application/json
Host: intropython.com
User-Agent: HTTPie/0.9.3
{
    "imp_uid": "imp_1234567890",
    "merchant_uid": "order_id_8237352",
    "status": "paid"
}

HTTP Response 구조

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

  • Status line (응답의 상태를 전달 해줘야 하기 때문)
  • Headers
  • Body

Status Line

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

HTTP/1.1 404 Not Found

  • HTTP 버전
  • Status code: 응답 상태를 나타내는 코드. 숫자로 되어 있는 코드.
    ex. 200
  • Status text: 응답 상태를 간략하게 설명해주는 부분.
    ex. "Not Found"
    Status code와 Status text는 같은 정보를 나타내지만 표현하는 방법이 다름

Headers

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

Body

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

HTTP/1.1 404 Not Found

Connection: close
Content-Length: 1573
Content-Type: text/html; charset=UTF-8
Date: Mon, 20 Aug 2018 07:59:05 GMT

Error 404 (Not Found)!!1

404. That’s an error.

The requested URL /payment-sync was not found on this server. That’s all we know.

GET(데이터를 요청)
POST(데이터의 변화 / 수정)
PUT(잘 사용하지 않음 / POST를 사용)

401 Unauthorized (인증)

404 Not Found
target URL이 잘못 되었다는 것
HOST가 잘못된 것은 connection 에러

profile
룰루랄라! 개발자 되고 싶어요🙈

0개의 댓글