dltmd202
dltmd202
dltmd202
전체 방문자
오늘
어제
  • 분류 전체보기 (11)
    • PS (3)
      • BOJ (3)
    • etc (2)
    • 알림서버 개발기 (3)
    • CS (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • http/2.0
  • JEST
  • 코틀린
  • 락 엘리베이션
  • HTTP
  • transaction deadlock
  • HTTP/2
  • 고아 프로세스
  • Spring Batch
  • 사이클 탐색
  • network
  • Kafka
  • kotlin
  • 스프링 배치
  • 좀비 프로세스
  • DeadLock
  • 다익스트라
  • 플로이드 와샬
  • 알림서버
  • 트랜잭션 데드락

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
dltmd202

dltmd202

HTTP/1에 대해
CS

HTTP/1에 대해

2024. 6. 13. 20:25

HTTP/0.9의 등장

HTTP 프로토콜은 HTML이라는 문서를 통신하기 위한 프로토콜로 1966년에 도입되었다. 이가 HTTP/0.9 이다.
이 버전은 GET 메소드만 지원하고 헤더나 상태 코드도 존재하지 않는 정말 프로토타입의 HTTP 프로토콜이었다.

HTTP1의 도입

HTTP/1.0은 POST나 HEAD 메서드가 추가된 형태이다.
이러한 메서드의 도입으로 응용할 수 있는 부분이 늘어났지만, 여전히 많은 문제를 가지고 있었다.
이러한 문제들을 해결하여 나온 HTTP 버전이 1.1이다.

Persistent Connections

HTTP는 단일한 요청에 대해 단일한 응답을 주는 프로토콜로 설계되었다.
하지만 요청이 빈번해져도 하나의 요청에 대해 하나의 응답만 해줄 수 있기 때문에 불필요한 3-way-handshake를 거쳐한다.

HTTP/1.1은 연결을 지속할 수 있도록 하여 이러한 오버헤드를 줄였다. 직접 닫도록 지시하지 않는 이상 TCP 커넥션을 열린 상태로 유지한다.

pipelining

HTTP/1.1은 파이프라이닝이 가능하도록 업데이트 되었다.

클라이언트가 먼저 처리한 요청에 대한 응답을 기다리지 않고 하나의 커넥션에서 여러 요청을 보낼 수 있도록 허용하는 것이다.

Chunked Transfer Encoding

HTTP/1.1은 서버가 전체 응답이 생성될 때까지 기다리지 않고 작은 청크 단위로 응답을 보낼 수 있도록 허용하는 청크 전송 인코딩을 도입되었다.

이를 통해 특히 대규모 또는 동적으로 생성된 콘텐츠의 경우 더 빠른 초기 페이지 렌더링과 향상된 사용자 경험이 가능해졌습니다.

Caching and Conditional Requests

HTTP/1.1은 조건부 요청을 처리하는 캐싱 전략들이 도입되었다.

Cache-Control 및 ETag와 같은 헤더를 추가하여 클라이언트와 서버가 캐시된 콘텐츠를 더 잘 관리하고 불필요한 데이터 전송을 줄일 수 있게 되었다.
If-Modified-Since 및 If-None-Match와 같은 헤더를 사용하는 조건부 요청을 사용하면 클라이언트가 이전 요청 이후 수정된 리소스만 요청할 수 있다.

HTTP/1.1의 문제

HTTP/1.1은 20년동안 웹 생태계의 많은 성장을 가져왔지만, 웹 또한 상당한 발전을 거듭하여 HTTP/1.1 또한 근본적인 성능 문제가 드러나고 있다.

1. pipelining의 문제

pipelining을 통해 하나의 요청을 따르는 다른 요청들을 대기하지 않고 파이프라이닝해서 요청할 수 있게 되었지만,
브라우저는 구현의 어려움으로 파이프라이닝을 지원하지 않는다.

또한 브라우저는 head-of-line(HOL 차단) 문제가 여전히 남아있다.
이 문제는 대기열 헤드에서 차단된 요청이 그 뒤의 모든 요청을 차단할 수 있다는 것이다.

2. 다수의 HTTP 커넥션 문제

HOL차단은 도메인당 여러 HTTP 연결을 잡아주는 방법으로 어느정도 해결되었다. 크롬은 도메인 당 최대 6개 까지 지원한다.

하지만 최근의 페이지들은 이것만으로 충분하지 않다.

차선책으로, 많은 웹서버들은 이미지, css, js 등의 정적 리소스들을 다른 서브도메인에서 서빙한다. 각각의 서브 도메인 마다, 요청에 대한 6개의 커넥션을 더 얻는다. 이를 Domain Sharing이라 부른다. 하지만 이 또한 문제가 있다.

TCP 커네션을 잡는데 시간이 걸리고, 별도의 메모리와 프로세스를 사용해야한다. 다수의 HTTP 커넥션을 사용하면, 서버와 클라이언트 모두 성능에 부하를 줄 수 있다.

'CS' 카테고리의 다른 글

HTTP/2에 대해  (0) 2024.07.01
좀비 프로세스와 고아프로세스  (0) 2024.06.07
    'CS' 카테고리의 다른 글
    • HTTP/2에 대해
    • 좀비 프로세스와 고아프로세스
    dltmd202
    dltmd202

    티스토리툴바