HTTP 개념 정리

[Network] HTTP 개념 정리


본 내용은 MDN HTTP 개요를 보고 공부, 정리한 내용입니다.

HTTP란?

Hyper Text Transfer Protocol. 직역하면 하이퍼텍스트 전송 규약이다.
웹 상에서 주고받는 데이터 (주로 HTML) 전송에 대한 여러 규칙이며, 서버-클라이언트 구조에서 사용되는 프로토콜이다.
서버-클라이언트 프로토콜 중 하나이므로, HTTP 역시 요청(Request)과 응답(Response)을 주고받는 매커니즘을 기본으로 한다. 좀 더 세부적으로 보면 HTTP는 Stateless 형식의 프로토콜이다. 즉, 서버가 클라이언트의 정보를 관리하지 않는다. 따라서 서버의 부하가 덜하고, 정보 전달이 빠를 수 있다. 다만, 채팅과 같은 서비스에는 어울리지 않을 것이다.
추가로, HTTP는 웹 브라우저와 웹 서버 간의 통신 방법이므로 애플리케이션 계층 에서의 프로토콜임을 기억하자. 내부적으로 Transport 계층의 TCP를 이용하지만, HTTP 자체는 애플리케이션 계층 간 프로토콜이다.

HTTP 통신 흐름

Client-Server Client-Proxy-Server 가장 기본적인 HTTP 통신 방법은 첫 번째 이미지와 같다. 클라이언트의 요청과 서버의 응답이 전부다. 일반적으로 클라이언트는 웹 브라우저이다. 하지만 두 번째 이미지처럼 중간에 프록시 서버가 존재하는 경우, 프록시 서버는 서버이면서 클라이언트의 역할도 수행한다.
(이처럼 클라이언트, 서버의 역할이 항상 고정되어 있다고 할 수는 없다.)
서버는 클라이언트의 요청을 받아 해당되는 HTML 파일 + 기타 리소스(CSS, JS 등등)를 클라이언트에게 전달한다.
이러한 역할을 하는 서버를 웹 서버 라고 부른다.

  • 프록시 서버
    Proxy는 “대리” 라는 뜻을 갖고 있다. 이름 그대로 프록시 서버는 웹 서버의 무언가를 대신하는 역할을 한다. 데이터를 주고받는 일이 매우 빈번한 인터넷 세계에서 웹 서버가 모든 작업을 처리한다면 당연히 부하가 심할 것이다. 따라서 프록시 서버는 웹 서버의 짐을 덜어주는 작업을 주로 맡는다.
    ex) 캐싱, 로드 밸런싱, 인증, 로깅, 필터링 등등..

HTTP의 장점

  • 간단함
    이해하기 쉽고, 태그를 이용하여 구분된 내용 정의가 가능하다.
  • 확장 가능
    서버, 클라이언트 상호 협의 시 추가적인 헤더를 통해 더 많은 정보를 전송, 수신할 수 있다.
  • 비연결성(Stateless)
    서버, 클라이언트가 서로의 상태를 신경쓰지 않으므로 더 빠르고 가벼운 통신이 가능하다.

HTTP 메세지

HTTP 메세지에는 요청 / 응답 메세지가 있다.
기본적으로 두 메세지 간 구성은 동일하다. 크게 시작줄 / 헤더블록 / 본문으로 구분할 수 있으며, 요청/응답 메세지는 시작줄의 내용에 차이가 있다.

요청 메세지의 시작줄 구성은 아래와 같다.

  • 메서드
    클라이언트가 서버에게 바라는 동작 (ex GET,POST 등등..)
    이외에도 커스텀 메서드를 만들어 통신 가능하다. (HTTP의 장점)
  • HTTP 버전
  • 리소스 URL
    동작에 대한 대상을 지칭한다.


응답 메세지의 시작줄 구성은 아래와 같다.

  • 상태코드
    클라이언트 요청에 대한 응답 결과가 코드로 보여진다.
    커스텀 메서드 요청이었다면 상태코드로는 확인이 어렵다. 이 때 사유구절을 확인하면 쉽게 알 수 있다.
  • 사유구절
    상태코드와 1:1로 대응된다. 상태코드를 해석한 내용이라고 생각하면 된다.
    엄격한 규칙은 없다.
  • HTTP 버전

HTTP 메세지에 대한 자세한 내용은 아래 블로그 포스트에서 굉장히 잘 설명하고 있다. 후에 더 자세하게 공부할 때 참고해야겠다.
https://feel5ny.github.io/2019/08/15/HTTP_003_01/

0%