본문 바로가기
cs 개념 정리

[네트워크] HTTP 프로토콜

by 박수련 2024. 3. 25.

HTTP 프로토콜이란

웹 브라우저와 웹 서버 간 텍스트, 이미지, 영상, json 등의 데이터를 주고 받기 위한 프로토콜

  1. 클라이언트 - 서버 구조를 갖는다.
    클라이언트는 서버와 연결을 생성해 요청을 보내고, 서버로부터 응답을 받을 때까지 기다린다.
  2. stateless한 특징을 가진다.
    이전 요청에서 발생했던 상태(데이터)를 저장하지 않는다. 로그인 후 페이지 이동 시 로그인 상태가 유지되지 않는 경우를 예로 들 수 있다.
  3. connectionless한 특징을 가진다.
    요청과 응답 후, 서버 간의 연결이 끊어진다. 서버의 자원 낭비를 줄일 수 있으나 요청을 여러 번 해야하는 경우, 매 요청마다 연결을 생성해야하기 때문에 효율이 떨어진다.

 

HTTP의 connection management 

HTTP 1.0

Short-lived connections

HTTP 1.0에서의 기본 모델이며 클라어언트와 서버 간 한번의 요청과 응답이 오고가면 연결이 끊어진다. 

HTTP 1.1에서는 Connection 헤더가 close로 설정되어 있을 때만 해당 모델이 사용된다.

정말 옛날 시스템이 아닌 이상, 사용되지 않는다. 

 

HTTP 1.1 

HTTP 1.0에서 요청시 매번 TCP handshake를 실행하는 것은 시스템의 성능 저하로 이어지기 때문에 이를 해결하기 위한 기능이 추가되었다. 

 

Persistent connections (= keep-alive connection)

HTTP 1.1에서의 기본 모델이며 일정 시간동안 TCP 연결을 유지한다.

Keep-Alive 헤더를 통해 idle 상태의 최소 시간과 요청의 최대 개수를 설정할 수 있다. 
클라이언트의 요청이 없어도 timeout 시간동안은 연결이 유지되기 때문에 자원이 낭비되는 단점이 있다. 

 

HTTP pipelining

응답이 올 때까지 요청을 기다리면 지연이 발생하기 때문에, 요청에 대한 응답을 기다리지 않고 요청을 한번에 여러 개 보낸다.
멱등성을 보장하는 요청에서만 해당 모델을 사용할 수 있다. (GET, HEAD, PUT, DELETE)

해당 모델은 구현하기 어려우며 여러 요청을 동시에 보내기 때문에 HOL blocking 문제를 야기한다. 

 

HOL blocking(head-of-line blocking)

큐의 처음 패킷이 뒤에 있는 패킷을 막고 있어 데이터 전송에 지연이 발생하는 현상 

큐3의 패킷4를 먼저 처리하면 큐1의 패킷4가 뒤에 있는 패킷 3,2,1을 막음

 

 

 

참고

https://developer.mozilla.org/en-US/docs/Web/HTTP/Overview

https://developer.mozilla.org/en-US/docs/Web/HTTP/Connection_management_in_HTTP_1.x

https://en.wikipedia.org/wiki/Head-of-line_blocking

https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/Evolution_of_HTTP

https://etloveguitar.tistory.com/137

'cs 개념 정리' 카테고리의 다른 글

[운영체제] 프로세스와 스레드  (1) 2024.04.06
[운영체제] 메모리 구조  (0) 2024.04.06