[HTTP] Connection Management

2020. 10. 1. 01:47·Web

 

HTTP / 1.x 의 Connection 방식은 크게 3가지로 나뉜다.

 

1. Short-Lived Connection

2. Keep-alive Connection

3. Pipelining Connection

이 3가지의 특징에 대해 알아보도록 하자.

 

 

1. Short-Lived Connection

3-way handshake -> HTTP Request/Response -> 4-way Handshake

HTTP 1.0 초기 버전에서 택한 방식인데 이방식은 치명적인 단점을 가지고 있다.

다음 그림에서 단점이 드러난다.

 

HTTP Request/Response 마다 Handshake를 통한 연결/해제가 반복된다.

 

한 번의 HTTP 요청/응답 마다 연결/해제를 반복한다는 점이다.

이는 하나의 HTML에 여러 이미지, 동영상이 포함되 있는 경우 여러번의 HTTP 요청/응답이 이뤄지기 때문에

통신량이 급격히 많아진다.

 

초기의 웹 페이지들은 텍스트로만 구성되있었기 때문에 short-lived Connectino 방식을 사용해도 문제가 없었지만

 

한 페이지 내에 많은 리소스를 담아 다량의 HTTP 요청/응답이 많은 요새는 쓰지 않는 방식이다.


2. Keep-alive Connection

명시적으로 연결을 종료할 때 까지 TCP 연결을 유지하여 HTTP Request/Response가 이뤄진다.

Persistent Connection == Keep-Alive Connection

1회의 TCP 연결로 Request/Response를 여러번 한다.

 

현재 모던 웹 브라우저들이 지원하는 연결 방식이다.

앞선 Short-Lived Connection은 3번의 요청/응답시마다 매번 연결/해제가 이뤄진데 반해

Keep-Alive Connection은 단 한번의 연결/해제 동안 요청/응답을 여러번 수행하여 네트워크 트레픽을 절약하고 처리속도 또한 빨라진다.

 

 


3. PipeLining Connection

이 연결방법의 특징은

HTTP 요청시 응답을 기다리지 않고 바로 다음 요청을 묶어 보낸다는 것이다.

따라서 요청-응답이 짝을 이루지 않게된다.

하나의 요청이 하나의 응답을 기다리지 않고 바로 다음 요청을 보낸다.

응답을 기다리지 않고 요청을 연속적으로 수행한다는 것은 효과적인 설계이다.

허나 Pipelining Connection 방식에는 다음과 같은 2가지 단점이 있다.

1. GET, HEAD, PUT, DELETE Method (Idempotent Method)만 이 방식을 사용할 수 있다.
2. 정확히 구현해내기 복잡하다.

따라서 오늘날, 모든 HTTP/1.1 호환 프록시와 서버들은 이 방식을 지원해야 하지만,

실제로는 많은 프록시와 서버들은 제한을 가지기 때문에 Keep-Alive Connection을 기본으로 사용한다.

 

 

 

3줄 요약

1. HTTP 연결 방식에는 Short-Lived , Keep - Alive Connection, Pipelining Connection 이 있다.

2. 뒤로 갈 수록 효율적인 방식이지만 현재는 Keep-Alive Connection 을 지원한다.

3. Pipelining Connection의 단점을 보완한 HTTP/2 에서는 Multiplexing 알고리즘이 사용된다.


[Reference]

developer.mozilla.org/ko/docs/Web/HTTP/Connection_management_in_HTTP_1.x

 

저작자표시 (새창열림)

'Web' 카테고리의 다른 글

TypeScript + Koa 프로젝트 생성  (0) 2020.12.03
Query String vs Params (Path)  (0) 2020.11.02
Cache vs Cookie vs Session  (0) 2020.09.18
HTTP  (0) 2020.09.18
스타일 적용 우선순위 & n-th selector  (0) 2020.02.20
'Web' 카테고리의 다른 글
  • TypeScript + Koa 프로젝트 생성
  • Query String vs Params (Path)
  • Cache vs Cookie vs Session
  • HTTP
M_Falcon
M_Falcon
  • M_Falcon
    Falcon
    M_Falcon
  • 전체
    오늘
    어제
    • 분류 전체보기 (432)
      • Web (16)
        • Nodejs (14)
        • Javascript (23)
        • FrontEnd (4)
      • DataBase (39)
        • Fundamental (1)
        • Redis (4)
        • PostgreSQL (10)
        • NoSQL (4)
        • MySQL (9)
        • MSSQL (3)
        • Error (4)
      • Algorithm (79)
        • Algorithm (문제풀이) (56)
        • Algorithm (이론) (23)
      • JVM (65)
        • Spring (13)
        • JPA (5)
        • Kotlin (13)
        • Java (24)
        • Error (7)
      • 기타 (70)
        • Kafka (3)
        • Kubernetes (3)
        • Docker (13)
        • git (19)
        • 잡동사니 (27)
      • 재테크 (11)
        • 세무 (4)
        • 투자 (3)
        • 보험 (0)
      • BlockChain (2)
        • BitCoin (0)
      • C (32)
        • C (10)
        • C++ (17)
        • Error (3)
      • Low Level (8)
        • OS (3)
        • 시스템 보안 (5)
      • 네트워크 (3)
      • LINUX (30)
        • Linux (26)
        • Error (4)
      • 저작권과 스마트폰의 이해 (0)
      • 생각 뭉치 (6)
      • 궁금증 (2)
      • Private (4)
        • 이직 경험 (0)
        • 꿈을 찾아서 (1)
      • Android (21)
        • OS (4)
  • 블로그 메뉴

    • 홈
    • WEB
    • 알고리즘
    • DataBase
    • Linux
    • Mobile
    • C
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    javascript
    android
    linux
    JPA
    ubuntu
    Programmers
    algorithm
    Kotlin
    백준
    C++
    database
    kafka
    java
    Spring
    Bitcoin
    Git
    docker
    알고리즘
    프로그래머스
    PostgreSQL
  • hELLO· Designed By정상우.v4.10.3
M_Falcon
[HTTP] Connection Management
상단으로

티스토리툴바