HTTP

민선규·2023년 7월 6일
0

네트워크

목록 보기
12/16
post-thumbnail

HTTP(Hyper Text Transfer Protocol)

역사

  • HTTP/1.1 1997년: 가장 많이 사용, 우리에게 가장 중요한 버전
    - RFC2068 (1997) -> RFC2616 (1999) -> RFC7230~7235 (2014)
  • HTTP/2 2015년: 성능 개선
  • HTTP/3 진행중: TCP 대신에 UDP 사용, 성능 개선

특징

  • 클라이언트 서버 구조
  • 비 연결성, Stateless
  • HTTP 메시지
  • 단순함, 확장 가능

클라이언트 서버 구조

  • Request Response 구조
  • 클라이언트는 서버에 요청을 보내고, 응답을 대기
  • 서버가 요청에 대한 결과를 만들어서 응답

Stateless

  • 서버가 클라이언트의 상태를 보존하지 않는다.
  • 서버 확장성이 높다.
  • 클라이언트의 추가 데이터를 전송해야 한다.

Stateful과 Stateless

Stateful은 중간에 담당자가 교체된다면 로직을 진행할 수 없다. 하지만 Stateless인 경우에는 유연하게 교체되어도 문제가 되지 않는다. 하지만 모든 것을 무상태로만 설계할 수 없으니 최소한의 Stateful만 사용 한다.

비 연결성

HTTP는 기본적으로 비 연결성이다. 그렇기 때문에 서버 자원을 효율적으로 사용할 수 있다. 하지만 비 연결성이기 때문에 매번 TCP 연결을 하는 과정과 하나의 화면에서도 JS, 이미지, CSS 등 수 많은 자원을 가져와야 하기 때문에 부하가 걸릴 수 있다.

이러한 상황을 HTTP 지속 연결(Persistent Connections)로 성능을 향상시켰다.

HTTP 메시지

HTTP의 메시지 구조는 위와 같다. 요청 메세지와 응답 메세지에 실제로 어떠한 데이터가 있는지 간단한게 정리해 보자

시작 라인

시작 라인에는 request-line/status-line이 올 수 있다. 요청에는 request-line, 응답에는 status-line이 온다.

request-line은 method SP(공백) request-target SP HTTP-version CRLF(엔터) 형태로 데이터를 가지고 있다. method에는 HTTP 메소드가 들어가며, request-target에는 절대경로 "/"로 시작하는 경로가 들어간다.

GET /search?q=hello&hl=ko HTTP/1.1

status-line에는 HTTP-version SP status-code SP reason-phrase CRLF 형태로 데이터를 가지고 있다.

HTTP/1.1 200 OK

헤더

헤더는 메시지 바디의 내용, 메시지 바디의 크기, 압축, 인증, 요청 클라이언트(브라우저) 정보,
서버 애플리케이션 정보, 캐시 관리 정보 등 HTTP 전송에 필요한 모든 부가 정보가 들어가 있다.
field-name ":" OWS field-value OWS 형태이다

Content-Type: text/html;charset=UTF-8
Content-Length: 3423

바디

실제 전송할 데이터가 담겨져 있으며 HTML 문서, 이미지, 영상, JSON 등 byte로 표현 가능한 모든 데이터를 전송할 수 있다.

참고 문서 및 링크

  • 모든 개발자를 위한 HTTP 웹 기본 지식

0개의 댓글