TIL - HTTP

김영훈·2021년 3월 30일
0

ETC

목록 보기
2/34

# HTTP란?

  • Hyper Text Transfer Protocol의 약자

  • 웹상에서 client와 server가 서로 HTML 파일을 주고받을 수 있도록 하는 의사소통 방식(규칙) 혹은 약속 의미

  • 또는 client와 server 간의 요청(request)응답(response)이 이뤄지는 동작 자체를 의미하기도 한다.

# HTTP의 두 가지 특징

  • Request / Response(요청/응답)

    • HTTP 통신에서 말하는 소통의 핵심은 요청응답

    • 이는 '발신자가 요청하고 수신자가 응답'하는 인간의 소통 방식이 컴퓨터 간의 소통 방식에도 그대로 적용된 것이라 할 수 있다.

  • Stateless

    Stateless = State(상태) + less(없음)

    • 각각의 HTTP 통신(요청/응답)은 독립적이기 때문에, 과거의 통신 내용은 기록으로 저장되지 않는다.

    • 그 때문에 통신이 이뤄질 때마다, 매번 필요한 모든 정보를 담아서 요청을 보내야 한다.

    • 여러 번의 통신이 진행되는 동안 연속된 데이터 처리가 필요한 경우(ex. 온라인 쇼핑몰에서 로그인 후 장바구니 기능을 이용), 로그인 토큰 또는 브라우저의 쿠키, 세션, 로컬스토리지 같은 기술을 사용해야 하는 이유도 여기에 있다.

# 메시지 구조

  • Request 메시지의 구조

    • start line

      ex) GET /login HTTP /1.1

      • HTTP Method: 해당 요청이 의도한 행동을 정의하는 부분. 주로 GET, POST, DELETE가 많이 쓰임
      • Request target: 해당 request가 전송되는 목표 URL
      • HTTP Version: 말 그대로 사용되는 HTTP 버전을 뜻한다. 주로 1.1 버전이 널리 쓰인다.
    • headers: {key:value}형식으로 이뤄졌다.

      • Host: 요청을 보내는 대상(웹 사이트)의 기본 주소( ex. www.apple.cokr)
      • User-Agent: 요청을 보내는 클라이언트브라우저에 대한 정보( ex. chrome, firefox, safari)
      • Content-Type: 해당 요청이 보내는 메시지 body의 타입( ex. application/json)
      • Content-Length: body 내용의 길이
      • Authorization: 회원의 인증/인가를 처리하기 위해 유저가 본인임을 증명할 수 있는 로그인 토큰을 Authorization에 담는다.
    • body: 해당 요청의 실제 내용. body가 주로 사용되는 메소드는 POST이다.


         # ex) 로그인 시에 서버에 보낼 요청의 내용**
         Body: {
            "user_email": "jun.choi@gmail.com"
            "user_password": "wecode"
         }
  • Response 메시지 구조
    • status line

      ex) HTTP/1.1 200 SUCCESS

      • HTTP Version: 요청(Request)의 HTTP버전과 동일

      • Status Code: 응답 메시지의 상태 코드

      • Status Text: 응답 메시지의 상태를 간략하게 설명해주는 텍스트

    • headers

      • 응답(Response)의 추가 정보(메타 데이터)를 담고 있는 부분으로 요청(Request)의 헤더와 동일하다. 다만 응답에서만 사용되는 정보도 존재한다.(User-Agent 대신, Server 헤더가 사용됨)
    • body

      • 요청(Request)의 body와 일반적으로 동일하다. 전송할 데이터가 없는 경우엔 body가 존재하지 않을 수도 있다. 가장 많이 사용되는 body의 데이터 타입은 JSON(JavaScript Object Notation)이다.

# HTTP Request 메소드

  • 자주 사용되는 HTTP Requst 메소드엔 세 가지가 있다.

    • GET

      • 서버에서 데이터를 받아오기만 할 때 사용된다.

      • 가장 간단하고 많이 사용되는 HTTP 메소드

    • POST

      • 데이터를 생성/수정할 때 주로 사용되는 메소드

      • 대부분의 경우 요청에 body가 포함돼서 보내진다.

    • DELETE

      • 특정 데이터를 서버에서 삭제하는 요청을 보낼 때 사용된다.

# Response Status Codes

  • 200: OK

    • 가장 자주 보게 되는 상태 코드

    • 백엔드 서버가 요청에 대해 문제없이 처리한 경우 나오는 응답코드

  • 201: Created

    • 무언가가 잘 생성됐을 때 보게 되는 상태 코드

    • POST요청에 따라 백엔드 서버에서 데이터가 문제없이 생성 또는 수정됐을 경우 보내는 코드

  • 400: Bad Request

    • 해당 요청이 잘못된 경우 보내는 상태코드

    • 주로 요청 메시지의 Body에 담아 보내는 내용이 잘못됐을 때 사용되는 코드
      ex) 전화번호를 보내야 하는데 숫자가 아닌 문자열의 주소가 Body에 담겼을 경우

  • 401: Unauthorized

    • 유저가 해당 요청을 보내기 위해선 먼저 로그인이나 회원가입이 필요하다는 의미
      • ex) wish list, 좋아요 기능은 회원이 아니면 요청을 보낼 수 없음
  • 403: Forbidden

    • 유저가 해당 요청에 대한 권한이 없다는 의미

    • 접근 불가능한 정보에 접근했을 경우에 보이는 상태 코드

      • ex) 오직 유료회원만 접근할 수 있는 데이터를 요청했을 때
  • 404: Not Found

    • 요청된 URI가 존재하지 않는다는 의미
  • 500: Internal Server Error

    • 서버에서 에러가 났을 경우의 Status Code

    • API 개발을 하는 백엔드 개발자들이 싫어하는 코드

profile
Difference & Repetition

0개의 댓글