[TIL] HTTP란?

breeeeze·2020년 10월 2일
0

사실 Today I Learned는 아니지만.. 저번 주 http 세션때 정리를 못해서 연휴 기간을 이용해 올려본다!

HTTP란 무엇일까?

HTTP는 Hyper Text Transfer Protocol의 약자로 인터넷끼리 HTML 파일을 주고받을 수 있도록하는 프로토콜(약속, 소통 방식)이다.

HyperText

HTML에서의 HT에 해당하는 부분과 동일한 것으로 HyperText란 문서와 문서가 링크로 연결될 수 있도록 하는 태그로 구성된 언어란 의미이다.

Transfer

'전송하다'라는 의미를 가진 단어이다. 내가 만든 웹사이트(HTML)을 아무에게도 전송하지 않고 나 혼자만이 로컬에서 갖고 있다면 사실상 그 사이트는 나만 볼 수 있는 큰 의미 없는 사이트가 될 것이다. 이 웹사이트를 다른 컴퓨터에게 전송함으로써 다른 사람들이 접근할 수 있는 의미있는 웹사이트가 된다.

Protocol

'협약, 약속, 규약'의 의미를 가진 단어로 컴퓨터끼리 HTML 파일을 주고 받는 것에 대한 약속을 의미한다. 한국인들끼리 한국어로 소통하듯 컴퓨터끼리의 소통 방식을 규정한 컴퓨터의 언어인 셈이다. 인터넷 상에서의 소통은 대부분 HTTP 규약을 따른다.

HTTP의 특징

01. request와 response

앞서 말한 transfer에서처럼 컴퓨터들끼리 전송을 하려면 요청과 응답이 선행되어야 할 것이다.
사용자가 어떤 사진의 링크를 누르면, 그 순간 내 컴퓨터는 서버에게 요청을 보낸다. 그 요청을 받은 서버는 이 요청을 처리해 내 컴퓨터에게 사진을 보내주는데, 이것이 서버가 내 컴퓨터에게 보내는 응답인 것이다.

02. Stateless

HTTP의 가장 중요한 특징 중 하나가 바로 stateless하다는 것이다.
stateless는 state(상태)가 less(없음), 즉 상태를 모른다는 의미로 각각의 HTTP 통신은 서로 독립적이기 때문에 과거에 어떤 요청과 응답이 오고 갔는지 전~혀 알지 못 한다. 그러므로 매 통신마다 필요한 모든 정보를 담아서 요청을 보내야 하는 것이다.
따라서 특정 정보가 저장돼야 할 경우 브라우저의 쿠키, 세션, 로컬 스토리지 같은 곳 등에 저장해놓아야 한다.

request 메세지 구조

request 메세지의 구조는 크게 세 부분으로 이루어져 있다.

Start line : 요청의 첫번째 시작 줄

  • HTTP method: GET, POST, DELETE 등이 쓰이는 곳으로 요청이 의도한 액션을 정의하는 부분
  • Request target: 요청이 전송되는 목표 url
  • HTTP version: 사용되는 HTTP의 버전, 주로 1.1 버전이 많이 쓰인다.

Headers : 요청의 메타 데이터가 담긴 부분

javascript의 객체, python의 딕셔너리 형태처럼 key: value의 형태로 이루어져 있다.
아래는 주로 사용되는 headers 정보이다.

  • host: 요청을 보내는 목표의 주소
  • user-agent: 요청을 보내는 클라이언트에 대한 정보 (chrome, safari 등)
  • content-type: 요청 메세지의 body의 타입 (ex. application/json)
  • content-length: body 내용 길이
  • authorization: 회원의 인증/인가를 처리하기 위한 로그인 토큰을 담는 곳

Body : 요청의 실제 내용

body가 없는 request도 많으며, 주로 body를 사용하는 메소드는 POST이다.
예를 들어 우리가 로그인을 하고자 할 때 로그인 시 서버에 보낼 요청의 내용에는 아래와 같이 아이디와 비밀번호가 담겨있어야 할 것이다.

Body: {
"user_id": "breeeeze"
"user_password": "12345"
}

response 메세지 구조

response도 마찬가지로 크게 세개의 구조로 되어 있다.

Status line : 응답 상태 줄

  • HTTP version : 요청의 HTTP version과 동일
  • status code : 응답 메세지의 상태 코드
    (200: OK / 401: unauthorized / 403: forbidden / 404: not found / 500: internal server error 등의 상태 코드가 있다.)
  • status text : 응답 메세지의 상태를 간략히 설명

Headers

request의 헤더와 동일하지만 response에서만 사용되는 헤더의 정보들이 있다.

Body

마찬가지로 request와 동일하다. 많이 쓰이는 body의 데이터 타입은 JSON이다.

HTTP Request Methods

  • GET
    데이터를 서버에서 받아올 때 사용하는 메소드.
    ex) 장바구니에 담은 제품 조회

  • POST
    데이터를 생성/수정할 때 주로 사용되는 메소드로 대부분 요청에 body가 포함된다.
    ex) 장바구니에 상품 추가

  • DELETE
    특정 데이터를 서버에서 삭제하고자 할 때 쓰는 메소드
    ex) 장바구니에서 상품 삭제

0개의 댓글