HTTP란?

이강일·2022년 1월 31일
0

처음에 HTTP라는 개념을 정확히 알지 못한 채로 프로젝트를 진행해 왔었습니다. 프론트/백 간에 소통을 하면서 어려움을 느끼고 정확히 파악하고자 글을 작성하게 되었습니다.

HTTP란?

  • HTTP(Hyper Text Transfer Protocol) 인터넷에서 데이터를 주고받을 수 있는 프로토콜입니다. 통신하는 규칙이라고 보면 됩니다.

HTTP에는 두 가지 특징이 있습니다.

첫 번째는 바로 RequestResponse입니다.

요청(Request)에는

  • Start Line : 요청의 첫 번째 줄에 해당합니다. 이 시작 줄도 세 부분으로 구성되어 있습니다.
    • HTTP Method : 해당 요청이 의도한 액션을 정의하는 부분. 주로 GET, POST, DELETE가 많이 쓰입니다.
    • Request target : 해당 request가 전송되는 목표 url
    • HTTP Version : 말 그대로 사용되는 HTTP 버전을 뜻합니다.

    • 예시) "GET /products/1 HTTP/1.1"
      GET method로 /products/1 이라는 요청 타겟에 HTTP/1.1 버전으로 요청을 보내겠다.
  • Headers : 해당 요청에 대한 추가 정보(메타 데이터)를 담고있는 부분이다.

    • Key : Value 값으로 되어있습니다. (JavaScript의 객체, Python의 딕셔너리 형태라고 보면 됩니다.)
    • Host : 요청을 보내는 목표 (Target)의 주소. 즉, 요청을 보내는 웹사이트의 기본 주소가 됩니다. (ex. www.apple.co.kr)
    • User-Agent : 요청을 보내는 클라이언트의 대한 정보 (chrome, firefox, safari, explorer)
    • Content-Type : 해당 요청이 보내는 메세지 body의 타입 (application/json)
    • Content-Length : body 내용의 길이
    • Authorization : 회원의 인증/인가를 처리하기 위해 로그인 토큰을 Authroization 에 담습니다.
       
    • ex)
      Headers : {
      Host :
      User-Agent :
      Content-Type :
      Content-Length :
      Authorization :
      }
  • Body : 해당 요청의 실제 내용

    • 주로 Body를 사용하는 메소드는 POST입니다.
    • 로그인 시에 서버에 보낼 요청의 내용
       
    • ex)
      Body: {
      "user_email": "jun.choi@gmail.com"
      "user_password": "wecode"
      }

응답(Response) 에는

  • Status Line : 응답의 상태줄 입니다.

    • 응답은 요청에 대한 처리상태를 클라이언트에게 알려주면서 내용을 시작합니다. 응답의 Status Line 도 세 부분으로 구성됩니다.
    • HTTP Version : 요청의 HTTP버전과 동일
    • Status Code : 응답 메세지의 상태 코드
    • Status Text : 응답 메세지의 상태를 간략하게 설명해주는 텍스트
       
    • ex) HTTP/1.1 404 Not Found
      HTTP/1.1버전으로 응답을 하고 있지만 요청에 대해서 정보를 찾지 못했다.
  • Headers : 요청의 헤더와 동일하다. 응답의 추가 정보(메타 데이터)를 담고있는 부분입니다.

    • 다만, 응답에서만 사용되는 헤더의 정보들이 있습니다.
      (요청하는 브라우저의 정보가 담긴 User-Agent 대신, Server 헤더가 사용됩니다.)
  • Body : 요청의 Body와 일반적으로 동일합니다.

    • 요청의 메소드에 따라 Body가 항상 존재하지 않듯이 응답도 응답의 형태에 따라 데이터를 전송할 필요가 없는 경우엔 Body가 없을 수도 있습니다.
    • 가장 많이 사용되는 Body 의 데이터 타입은 JSON(JavaScript Object Notation) 입니다.
    • 로그인 요청에 대해 성공했을 때 응답의 내용
       
    • ex)
      Body: {
      "message": "SUCCESS"
      "token": “welruqweriewquyrouwyqeoir” (암호화된 유저의 정보)
      }

HTTP의 두번째 특징으로는

  • Stateless
    • 절대 잊어서는 안될 특징이 바로 이것입니다. 통신의 요청/응답은 독립적이기 때문에 이전의 통신 내용(요청/응답)을 알지 못합니다. 그래서 매 통신 마다 필요한 모든 정보를 담아서 요청을 보내야합니다. 만약 그 정보를 처리했고, 그 정보를 계속 가지고 있고 싶다면 토큰 또는 쿠기, 세션, 로컬스토리기 같은 기술이 필요합니다.

0개의 댓글