HTTP/1.0과 HTTP/1.1의 차이

이강용·2024년 6월 15일
0

CS

목록 보기
56/109

HTTP/1.0

  • 수명이 짧은 연결
  • 각 HTTP 요청 당 TCP 핸드세이크가 발생되며 기본적으로 한 연결당 하나의 요청을 처리하도록 설계
  • 한번 연결 할 때마다 TCP 연결을 계속해야 하니 RTT가 늘어나는 문제가 있음

RTT(Round Trip Time)이란?

  • 신호를 전송하고 해당 신호의 수신 확인에 걸린 시간을 더한 값이자, 어떤 메시지가 두 장치 사이를 왕복하는 데 걸리는 시간

HTTP/1.1

  • HTTP/1.1은 HTTP/1.0의 단점을 보완한 프로토콜
  1. Keep-alive default
  • 매번 데이터를 요청할 때마다 TCP 연결을 하는게 아닌 한번 해놓고 계속해서 데이터를 받을 수 있게 만듦

const express = require("express");
const app = express();
app.get("/", (req, res) => {
  res.json({ a: 1 });
});
const server = app.listen(12010);
server.keepAliveTimeout = 30 * 1000;

127.0.0.1:12010

  1. 호스트 헤더
  • HTTP/1.0은 서버가 하나의 호스트만 가진다고 가정하기 때문에 HTTP/1.0은 헤더에 호스트를 포함하지 않음

    • 때문에 HTTP/1.0은 하나의 IP에 하나의 호스트만 가질 수 있음
  • HTTP/1.1은 헤더에 특정 호스트를 포함할 수 있게 변경되었으며 항상 호스트를 포함해서 요청하도록 변경

  1. 대역폭 최적화
  • HTTP/1.0의 경우 어떠한 파일을 다운로드 받다가 연결이 끊기면 다시 다운로드 받는 것은 불가능 했음, HTTP/1.1에서는 이를 다시 다운로드 받을 수 있게 변경
    • 예를들어, HTTP/1.0에서 10KB 파일을 다운로드 받는다고 했을 때, 5KB까지만 받고 다시 다운로드를 받는게 불가능했지만 HTTP/1.1에서는 Range:byte=5000-라는 헤더를 추가해서 다운로드 재개 요청을 할 수 있게 변경

요청을 줄이기 위한 기술

  • HTTP/1.1로 발전했음에도 불구하고 서버 요청을 할 때마다 RTT는 계속해서 증가하기 때문에 요청을 줄이기 위한 여러가지 기술들이 개발
    • 대표적으로, 이미지스프라이트(Image Sprite), 코드압축, Base64 인코딩 기술을 같이 쓰게 됨(HTTP 버전이 올라간 뒤에도 이러한 기술들은 같이 쓰임)

이미지 스프라이트

  • 수많은 이미지를 하나의 이미지로 만들어 하나의 이미지만 다운 받아놓고 이를 통해 수많은 이미지를 다운받는 듯한 효과를 내는 것

    • naver → sp_main.png

코드압축

https://www.toptal.com/developers/javascript-minifier

이미지 Base64 인코딩

  • 이미지 파일을 Base64 인코딩하면 바이너리 데이터를 텍스트 형식으로 변환하여 이미지 서버에 대한 HTTP 요청 없이도 이미지를 포함할 수 있음
    • 하지만, Base64 인코딩의 단점 중 하나는 인코딩된 데이터의 크기가 원래 데이터보다 약 33%에서 37% 더 커진다는 것
      • 이는 인코딩 과정에서 바이너리 데이터를 6비트 단위로 쪼개어 8비트의 ASCII 문자로 변환하기 때문

예시 - 변경 전

예시 - 변경 후

https://www.base64-image.de/

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <img
      src=""
      alt=""
    />
  </body>
</html>

HTTP/1.1의 고질적인 문제 : HOL(Head Of Line Blocking)

  • 네트워크에서 같은 큐에 있는 패킷이 그 첫번째 패킷에 의해 지연될 때 발생하는 성능 저하 현상
특징HTTP/1.0HTTP/1.1
연결 관리요청/응답 당 하나의 연결지속적인 연결 유지
호스트 헤더필수 아님필수
캐싱기본적인 캐싱 지원세밀한 캐싱 제어
대역폭 최적화단순 텍스트 기반 전송청크 전송 인코딩 지원
에러 코드와 상태 코드기본적인 상태 코드 지원추가 상태 코드와 오류 처리
요청 메서드GET, POST, HEAD 지원PUT, DELETE, OPTIONS 등 추가 메서드 지원
profile
HW + SW = 1

0개의 댓글