일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ECMAScript
- frontend
- TypeScript
- Javascript
- Spock Stub
- Spock Mock Stub Spy
- Spock Spy
- 트랜잭션 격리
- DI
- 의존성주입
- enum
- docker desktop 유료화 정책
- docker desktop 대체
- 자바스크립트
- Rancher Desktop설치
- Vue+Typescript
- @Transaction isolation
- 공짜로 Docker Desktop같은거 쓰기
- nuxtjs/composition-api buildModules
- TCP/IP
- mock stub spy
- webpack
- Mock vs Stub
- @Transaction propagation
- 타입스크립트
- HTTP란
- Spock Mock
- mock stub
- vue store
- Docker Desktop 쓰고싶다
- Today
- Total
끄적끄적
[네트워크] HTTP - 히스토리 및 버전 알아보기 본문
HTTP 버전
HTTP는 초기 버전을 시작으로 계속해서 진화하고 있습니다.
개발된 초기에는 버전이 없었다고 하는데요. 이후에 0.9버전이라는 이름이 붙었습니다. 초기에는 HTML파일만 전송이 가능했습니다.
HTTP 메서드의 값도 존재하지 않은 상태였기 때문에 사실상 미완성 버전이라는 의미로 0.9라고 명시하는 것 같았습니다.
우리가 흔히아는 HTTP의 GET,POST,PUT,PATCH,DELETE같은 개념은 이후에 버전이 올라가면서 진화를 한 형태이고, 초기에 상태 값
즉, status값 200,300,400,500번대의 개념은 존재하지 않았어요.
그리고 HTTP버전은 브라우저 설정을 통해 변경 할 수 있습니다. 그래서 면접을 보게 되면 HTTP의 메서드에 대해 현재 어떠한 것이 있는지 그리고 어떠한 기능이 되는지 기존에 알고있던 잘못된 개념에 대해 제대로 인지하고 있는지 물어보곤 합니다. 지금 현재는 HTTP 2.0까지 출시되었습니다.
그럼 HTTP의 버전별 어떻게 변화가 있었는지에 대해 좀 더 자세히 알아보도록 합시다.
HTTP0.9
현재 초기버전으로 알려진 0.9버전입니다. 1991년에 개발 되었고, 저도 이때부터 개발을 시작했던 것은 아니기에 자세히 모르고 이런게 있었다. 정도로 알고있는데요. HTTP의 초기버전은 원라인 프로토콜 즉, 위에 기술한 내용대로 요청은 단일 라인으로 구성되며 리소스에 대한 (프로토콜, 서버 그리고 포트는 서버가 연결되고 나면 불필요로 하므로 URL은 아닌) 경로로 가능한 메서드는 GET이 유일했습니다.
그리고, 헤더가 존재하지 않았기 때문에 HTML파일만 전송이 가능했고, GET과 다른 메서드가 없다면 HTML파일만 받기만 했다는 의미죠.
HTTP1.0
이후 제한적이고 단순한 환경에 조금 더 다양한 서비스가 가능해 지도록 1.0으로 업데이트 되었고, HTTP 메서드에 HTTP/1.0이라는 버전 정보가 서버/클라이언트 간 요청사이에 붙었습니다. 그리고 이때부터 요청/응답간 상태 코드가 생겼고, 성공과 실패, 결과에 대한 동작이 가능하게 되었죠.
이때 메서드에 POST, HEAD가 추가되었습니다.
요청/응답간 헤더가 생겨 메타데이터 전송이 가능하고 유연하고 확장이 가능한 환경이 되었습니다.그리고 content-type이란 헤더에 메서드가 생겨 HTML파일 외에 다양한 문서들의 전송이 가능해 졌습니다.
HTTP 1.0은 1996년 11월에 일반적인 실제 내용을 설명하는 정보 문서는 RFC 1945에 공개되었습니다.
하지만 1.0 초기버전 이후 한번 더 개선 되었습니다.
초기에는 없었지만 비공식상 1.0+라는 버전이 있었고, Keep-Alive커넥션, 가상호스팅 지원, 프락시 연결 지원 등 (공식 문서에는 없었다고 합니다.) 이때 표준적으로 추가 되었습니다. 이 규격 외에 확장된 HTTP버전을 1.0+라고 합니다.
HTTP1.1
HTTP1.1은 1997년 1월에 RFC 2068에서 처음 공개 되어진 것으로 알려져 있습니다. 15년이 넘는 세월을 현재의 버전을 사용하고 있었습니다.(아마 우리가 대부분 흔히 알고 있는 HTTP에 대한 개념은 1.1버전이라 알고 계시면 될 것 같습니다.)
HTTP1.1은 HTTP의 첫번째 표준 버전입니다. 그리고 이때에 메서드에 OPTIONS, PUT, DELETE, TRACE 가 추가되었습니다.
그리고 가장 크게 차이가 나는 성능이 최적화 되었습니다. 바로 연결 지속성이죠.
이전 버전 1.0에서는 10번의 요청이 발생하면 10번의 요청/응답의 대한 커넥션을 맺고 끊음을 10번을 반복합니다.
하지만 1.1버전에서는 일정시간 동안 클라이언트/서버 간의 커넥션을 기억하여 맺고 끊는 횟수를 줄였습니다.
그리고 파이프라이닝이라는 것도 추가 되었습니다. 이 기능은 첫번째 요청에 대한 응답이 오기전에 다음 요청을 보낼 수 있게 된 것이죠.
하나 더 중요한 것은 1.0과 달리 Connection: keep-alive라는 헤더를 사용하지 않아도 모든 요청/응답에 대한 커넥션 처리를 재사용 할 수 있도록 설계 되었습니다. 필요없는 경우에만 Connection:close를 사용하여 연결 종료하는 방식으로 변경 되었죠.
HTTP2.0
HTTP2.0은 SPDY를 기반으로 설계가 되었죠. SPDY 프로토콜.. 구글이 2010년 초기에 더 빠른 웹을 위한 실험적인 프로토콜입니다.
이 실험을 통해 더 성능이 개선효과가 있다는 걸 증명하고, 2012년에 SPDY기반으로 설계하기로 결정했다고 합니다.
HTTP2.0은 기존의 HTTP프로토콜과는 확연한 차이가 있습니다. 기존의 텍스트 프로토콜이 아닌 이진 프로토콜이며, 그리고 또한 가장 큰 장점은 1버전대에선 직렬방식의 직렬식 페이지 로딩만 구현이 가능했었다면, 2.0에선 단일 TCP커넥션 내에서 병렬식 다중 페이지 로딩 구현이 가능합니다 이를 멀티플렉싱 요청이라고 합니다. 그리고 부가적으로 개선된 점은 헤더 압축(HTTP Header), 서버푸시(서버에서 부터 시작되는 전송)인데요.
헤더 압축은 많은 수의 여분의 헤더 프레임을 압축합니다. HPACK 사양을 헤더 압축에 대한 간단하고 안전한 방법으로 사용합니다.
HOL블로킹(head-of-line blocking) 문제 개선 (head-of-line blocking - 네트워크에서 같은 큐에 있는 패킷이 첫번째 패킷에 의해 지연될 때 발생하는 성능 저하 현상, 패킷의 처리 속도는 지연이 되고, 최악의 경우 드랍까지 발생)
다음에는 어떻게 변할까 궁금하긴 하네요. HTTP2.0에 대해선 더 깊이 알아볼 필요가 있으니 따로 글을 작성해 더 깊이 알아보도록 합시다.
' Computer Science > Network' 카테고리의 다른 글
[네트워크] Rest API란? (0) | 2021.05.17 |
---|---|
[네트워크] keep-alive에 대해서 알아보자 (0) | 2020.06.14 |
[네트워크] TCP/IP 3way HandShake & 4way HandShake (0) | 2019.07.11 |
[네트워크] HTTP - 기초 및 개념 이해 (0) | 2019.06.22 |