개발/프론트엔드

[네트워크] HTTP 0.9 vs HTTP 1.0 vs HTTP 1.1 vs HTTP 2.0

donggyu 2022. 10. 26. 00:26
반응형

HTTP 0.9

💡 원-라인 프로토콜, 요청은 단일 라인으로 구성 , 단순 그 자체

  • HTTP 초기 버전에는 버전 번호가 없었다.
  • HTTP/0.9는 이후에 차후 버전과 구별하기 위해 0.9로 불리게 되었다.
GET /mypage.html
  • GET 메서드만 지원함
<HTML>
A very simple HTML page
</HTML>
  • 간단한 HTML 객체만 받아 오기 위해 만들어짐
  • MIME 타입 , 헤더 , 상태 코드 없음

 

HTTP 1.0

💡 확장성

  • 요청에 버전 정보가 추가 되었음
GET /mypage.html HTTP/1.0
  • HTTP 헤더, 추가 메서드 , 상태 , MIME 타입 추가
  • HTML 파일 외에 다른 문서들도 전송 가능
GET /mypage.html HTTP/1.0
User-Agent: NCSA_Mosaic/2.0 (Windows 3.1)

200 OK
Date: Tue, 15 Nov 1994 08:12:31 GMT
Server: CERN/3.0 libwww/2.17
Content-Type: text/html
<HTML>
A page with an image
  <IMG SRC="/myimage.gif">
</HTML>

 

HTTP 1.1

💡 표준 프로토콜 , Persistent Connection (커넥션 재사용 ) , 파이프라이닝 HOL(Head of line) blocking - 특정 응답 지연 , Host Header

  • HTTP 1.0 은 연결 완료 → 클라이언트 요청 → 서버 응답 → 연결 종료 (반복)
  • 매번 새로운 연결 ⇒ 성능 저하 , 서버 부하 비용 증가
  • HTTP 1.1 은 Persistent Connection (커넥션 재사용) : 지정한 timeout 동안 connection 을 닫지 않는 방식
  • Connection : Keep-Alive 헤더 추가
  • 1.0 에도 Keep-Alive 가 있었는데 표준화되지 않았음
Connection : Keep-Alive
Keep-Alive : max =5 , timeout = 120 
// 서버가 약 5개의 추가 트랜잭션이 처리될 동안 커넥션을 유지하거나 , 2분 동안 커넥션 유지

  • HTTP 1.0 요청 컨텐츠마다 TCP 세션을 맺어야함
  • HTTP 1.1 한 개의 TCP 세션을 통해 여러 개의 콘텐츠 요청이 가능하다.

하지만 , 응답을 받아야만 그 다음 요청을 보낼 수 있기 때문에 심각한 회전 지연(latency) 을 피할 수 없었다.

  • 파이프라이닝 : 하나의 커넥션에서 응답을 기다리지 않고 순차적인 여러 요청을 연속적으로 보내 그 순서에 맞춰 응답을 받는 방식으로 지연 시간을 줄이는 방법
    • HTTP 클라이언트는 커넥션이 언제 끊어지더라도, 완료되지 않은 요청이 파이프라인에 있으면 언제든 다시 요청을 보낼 준비가 되어 있어야 한다.
    • 클라이언트는 POST 와 같은 멱등이 아닌 요청은 파이프라인을 통해 요청하면 안된다.
    • 전송 커넥션이 예상치 못하게 끊어져 버렸을 때, 알 수 없는 결과를 초래할 수 있기 때문이다.
  • HOL(Head Of Line ) Blocking - 특정 응답 지연
    • 처음에 요청한 request 에 문제가 발생해 응답이 늦어 질 경우, 2번째 3번째 요청한 request 의 응답도 같이 늦어짐
    • 먼저 처리 할 수 있는 것부터 응답해주면 안됨?? HTTP 프로토콜의 규칙(서버는 반드시 응답을 요청 순서에 맞추어 전달해야 한다)

HTTP 2.0 (2015년 5월 등장)

💡 더 나은 성능을 위한 프로토콜

구글의 SPDY 프로토콜을 기반으로 설계됨

  • 헤더 압축
  • Server Push
  • 바이너리 프로토콜
  • Multiplexing

HTTP 3.0 은 TCP 가 아닌 UDP

반응형