HTTP

가비·2021년 1월 17일
0

HTTP(Hyper Transfer Protocol)란? 웹상에서 서로 다른 서버 간 하이퍼텍스트 문서(HTML)을 주고받을 수 있도록 만들어진 통신 규약이다. 이러한 통신 형식을 프로토콜(protocol)이라 하고 가장 널리 사용되는 프로토콜이 HTTP다.

통신 방식

HTTP 요청과 응답

  • HTTP는 요청(request)과 응답(response)의 구조로 되어있다.
    👉 클라이언트가 HTTP 요청을 서버에 보내면 서버는 요청 처리 후 결과에 따른 HTTP 응답을 클라이언트에게 보냄으로써 하나의 HTTP 통신이 된다.

Stateless

  • 상태(state)가 없다는 뜻으로 HTTP 통신에서는 상태라는 개념이 존재하지 않는다.
  • 각각의 HTTP 통신은 독립적이며 그 전에 처리된 HTTP 통신에 대해 전혀 알지 못한다.

장점

  • 서버 디자인이 간단해지고 효과적이다.
    👉 HTTP 통신들의 상태를 서버에서 저장할 필요가 없으므로 다른 HTTP 통신간의 진행 및 연결 상태의 처리나 저장을 구현하고 관리하지 않아도 된다.
    ✔️ 각각의 HTTP 요청에 대해 독립적인 응답만 보내주면 된다.

단점

  • 해당 요청을 처리하기 위해 필요한 모든 데이터를 매번 포함시켜 요청해야 한다.
    👉 예를 들어 새로운 요청에 사용자의 로그인 여부를 포함시켜 보내야 한다면 클라이언트가 사용자의 로그인 사실 여부를 기억하고 있어야 되므로 쿠키(cookie)나 세션(session) 등을 사용하여 요청을 처리할 때 필요한 진행 과정이나 데이터를 저장한다.

쿠키

  • 웹 브라우저(클라이언트 측)는 쿠키라고 하는 파일을 사용하여 웹사이트에서 보내온 필요한 정보를 저장한다.

세션

  • 웹 서버에서 필요한 데이터를 저장한다.

요청 구조

Start Line

# search 엔드포인트에 GET HTTP 요청
ex. GET /search HTTP/1.1

HTTP 메소드

  • 해당 HTTP 요청이 의도하는 액션을 정의하는 부분이다.
  • POST, GET, PATCH, PUT, DELETE, OPTIONS 등 여러 메소드들이 있다.

Request target

  • 해당 HTTP 요청이 전송되는 목표 주소를 말한다.

HTTP version

  • HTTP 버전에는 1.0, 1.1, 2.0이 있다.
  • 버전에 따라 요청 메시지의 구조나 데이터가 다를 수 있으므로 버전을 명시한다.

헤더

# google.com에 보내는 HTTP 요청의 Host 헤더
ex. HOST : google.com
  • HTTP 요청 그 자체에 대한 정보를 담고 있다.
    👉 ex. 요청 메시지의 전체 크기(Content-length)
  • 파이썬의 딕셔너리처럼 Key:Value로 되어 있다.

Host

  • 요청이 전송되는 target 호스트의 URL 주소를 알려주는 헤더.

User-Agent

  • 요청을 보내는 클라이언트에 대한 정보로 예를 들면 웹 브라우저에 대한 정보.

Accept

  • 해당 요청이 받을 수 있는 응답 body 데이터 타입을 알려주는 헤더.
  • MIME(Multipurpose Internet Mail Extensions) type이 value로 지정된다. 참고👀
    👉 JSON 데이터 타입을 요청하는 경우 application/json MIME type을 value로 정해 주고 모든 데이터 타입을 허용하는 경우 */*로 지정해주면 된다.

Connection

  • 해당 요청이 끝난 후 클라이언트와 서버가 네트워크 연결을 유지할 것인지에 대해 알려 주는 헤더.
    👉 HTTP 통신에서 서버 간 네트워크 연결 과정이 다른 작업에 비해 시간이 걸리므로 요청이 계속되는 한 처음 만든 연결을 재사용하는 것이 선호된다.
  • connection 헤더의 값이 keep-alive 이면 유지, close 이면 닫아도 된다는 뜻이다.

Content-Type

  • HTTP 요청이 보내는 메시지 body의 타입을 알려주는 헤더.
  • Accept 헤더와 마찬가지로 MIME type이 사용된다.

Content-Length

  • HTTP 요청이 보내는 메시지 body의 총 사이즈를 알려 주는 헤더.

Body

  • HTTP 요청이 전송하는 데이터를 담고 있는 부분으로 전송하는 데이터가 없다면 비어 있게 된다.

응답 구조

Status Line

ex. HTTP/1.1 404 Not Found
  • 응답 메시지의 상태를 요약하여 알려 주는 부분이다.

HTTP version

  • start line과 마찬가지로 사용되고 있는 버전을 나타낸다.

Status code

  • 응답 상태를 미리 지정되어 있는 숫자로 된 코드로 나타낸다.

status text

  • 응답 상태를 간략하게 글로 설명해 주는 부분이다.

헤더

  • HTTP 요청의 헤더 부분과 동일하지만 응답에서만 사용되는 헤더 값들이 있다.
    👉 ex. User-Agent 헤더 대신 Server 헤더가 사용된다.

Body

  • HTTP 요청 메시지의 body와 동일하다. 전송하는 데이터가 없다면 비어 있게 된다.

0개의 댓글