오늘은 HTTP의 발전과정을 알아보도록 하겠습니다
1. HTTP/1.0
수명이 짧은 연결이라고 합니다. HTTP요청은 자체 요청에서 완료가 됩ㄴ다. 각 요청당 TCP핸드셰이크가 발생되며 기본적으로 한 연결당 하나의 요청을 처리하도록 설계되어 있습니다. 한번 연결할 때마다 TCP연결을 계속해야하니 RTT가 늘어나는 문제점이 있었습니다.
** RTT?? Round Trip Time(왕복지연시간): 신호를 전송하고 해당 신호의 수신확인에 걸린 시간을 더한 값이자 어떤 메시지가 두 장치 사이를 왕복하는데 걸린 시간
이를 해결하기 위해 HTTP/1.1이 나옵니다!
2. HTTP/1.1
이전과의 3가지 차이점
(1) keep-alive default
매번 데이터를 요청할 때마다 TCP연결을 하는게 아닌, 한번 해놓고 계속해서 데이터를 받을 수 있게 만들었습니다.
이는 keep-alive옵션을 기본 옵션으로 하면서 가능해졌습니다.
keep-alive header
TCP연결을 유지하는 것을 알려주는 헤더로 연결유지시간인 timeout과 최대 요청수 max를 정할 수 있습니다.
[참고] NodeJs는 timeout시간만을 지정할 수 있다...
(2) 호스트 해더
HTTP/1.0은 서버가 하나의 호스트만 가진다고 가정하기 때문에 HTTP/1.0은 헤더에 호스트를 포함하지 않습니다. 이로인해, HTTP/1.0은 하나의 IP에 하나의 호스트만 가질 수 있었습니다.
but!! 사실 서버는 여러개의 호스트를 가질 수 있으며 이런 유연성을 위해 HTTP/1.1은 헤더에 특정 호스트를 포함할 수 있게 변경되었으며 항상 호스트를 포함해서 요청하도록 바뀌었습니다.
(3) 대역폭 최적화
HTTP/1.0의 경우 어떠한 파일을 다운로드 받다가 연결이 끊기면 다시 다운로드 받는 것은 불가능했습니다.
하지만 1.1에서는 가능합니다!
EX) HTTP/1.0에서 10KB 파일을 다운로드 받는다고 했을 때 5KB까지만 받고 다시 다운로드 받는게 불가능
-> HTTP/1.1에서는 Range:bytes=5000- 라는 헤더를 추가해서 다운로드 재개 요청을 할 수 있게 바뀐것!!
3. 요청을 줄이기 위한 기술
HTTP/1.1로 발전했음에도 서버요청할 때마다 RTT는 계속해서 증가하기 때문에 요청을 줄이기 위한 여러가지 기술들이 있었습니다.
대표적으로 이미지스프라이트, 코드압축, Base64인코딩 기술을 같이 쓰게되었습니다. HTTP버전이 올라간 뒤에도 이러한 기술들을 같이 쓰곤하니 알아두면 좋겠죠?
(1)이미지 스프라이트(image sprite)
수많은 이미지를 하나의 이미지로 만들어 하나의 이미지만 다운받아놓고 이를 통해 수많은 이미지를 다운받는 듯한 효과를 내는 것
(2)코드 압축
코드를 압축해서 서빙
(3) 이미지 Base64 인코딩
이미지 파일을 64진법으로 이루어진 문자열로 인코딩해서 이미지 서버에 대한 HTTP요청을 할 필요가 없이 만드는 것을 말합니다. 하지만, Base64 인코딩을 할 경우 파일 크기가 37퍼센트정도 커지는 단점이 있었음...
4. HTTP/1.1의 고질적인 문제: HOL
HOL과 무거운 헤더(header)를 가지는 문제점이 있었고 이를 해결하지 못했습니다.
HOL: 네트워크에서 같은 큐에 있는 패킷이 그 첫번째 패킷에 의해 지연될 때 발생하는 성능저하 현상
'네트워크' 카테고리의 다른 글
RefreshToken & AccessToken (0) | 2024.02.19 |
---|---|
Session VS JWT Token (0) | 2024.02.19 |
[네트워크] HTTPS와 TLS(SSL) (2) | 2024.01.25 |
[네트워크] HTTP 심화-(2)HTTP/2 vs HTTP/3 (3) | 2024.01.25 |
[네트워크] HTTP기본 (1)HTTP헤더 (2) | 2024.01.25 |