HTTP
HTTP(Hypertext Transfer Protocol)는 인터넷에서 리소스(텍스트, 파일, 이미지 등)를 주고받기 위한 응용 프로그램 계층의 프로토콜입니다. 1989년 CERN의 Tim Berners-Lee가 발명하였으며 클라이언트-서버 모델에서 요청-응답 프로토콜로 동작합니다.
HTTP는 HTTP/0.9, HTTP/1.0, HTTP/1.1 및 HTTP/2.0 네 가지 버전이 존재합니다. 현재 일반적으로 사용되는 버전은 HTTP/1.1이고 HTTP/1.1 성능 문제를 개선하기 위해 HTTP/2.0이 개발되었으나 아직 널리 사용되고 있지 않습니다.
HTTP/0.9
HTTP/0.9는 HTTP 프로토콜의 가장 초기 버전입니다.
HTTP/0.9의 특징
- 단순한 클라이언트-서버, 요청-응답 프로토콜에 사용
- 지원되는 메서드: GET
- 요청 특징: 한 줄(메서드 + 경로)
- 응답 타입: 하이퍼텍스트
- HTTP 헤더 없음: MIME Type 설정 불가하므로 다른 콘텐츠 유형 파일(이미지, 동영상, 파일 등)을 전송할 수 없음
- URL 없음
- 상태/오류 코드 없음
- 버전 없음: 추후 0.9 버전으로 정의되었음
HTTP/1.0
클라이언트-서버 응용 프로그램이 발전함에 따라 다른 콘텐츠 유형 파일의 교환 필요성이 대두되었습니다. HTTP/1.0에는 몇 가지 새로운 기능이 도입되었습니다.
HTTP/1.0의 특징
- HTTP 헤더 도입
- 지원되는 메서드: GET, POST, HEAD
- HTTP 프로토콜 버전 도입
HTTPS의 등장
1994년 HTTPS(Hypertext Transfer Protocol Secure)이 등장했습니다. HTTP/0.9와 HTTP/1.0에서는 로그인, 비밀번호 및 사적인 데이터를 쉽게 접근할 수 있어서 이 당시 사이버 범죄가 많이 발생하였습니다. 이러한 문제를 해결하기 위해 암호화된 데이터를 전달하는 방식인 HTTPS가 등장했으며 SSL은 현재 TLS 1.2 및 1.3 버전으로 발전했습니다.
HTTP/1.1
HTTP의 표준화 버전인 HTTP/1.1은 1997년에 도입되었으며 현재 일반적으로 사용되는 버전입니다. HTTP/0.9 및 HTTP/1.0에 비해 성능이 최적화되었으며 구조적 결함을 교정하고 문제 있는 기능을 제거하는데 집중하였습니다.
HTTP/1.1의 특징
- HTTP/0.9와 HTTP/1.0은 요청에 대한 응답을 받으면 연결이 바로 종료되었습니다. 하지만 HTTP/1.1은 지속적인 연결이 가능합니다.
- 지원되는 메서드: GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS
- 파이프라이닝, 콘텐츠 협상, 캐시 제어 도입
파이프라이닝(pipelining)
첫 번째 요청에 대한 응답을 받기 전에 두 번째 요청을 전송할 수 있음
콘텐츠 협상(content negotitation)
클라이언트-서버에서 어떠한 타입의 리소스를 교환할 것인지 정하는 방법
케시 제어(cache control)
요청 및 응답에서 캐시 정책을 수행함
HTTP/2.0
2010년 초 Google에서 개발 중이고 실험 중인 SPDY 프로토콜을 도입했지만 IETF에서 2015년에 HTTP/2.0을 출시했습니다.
다음은 HTTP/2.0의 주요 기능입니다.
멀티플렉싱 요청
HTTP/1.1 방식은 리소스 형태에 따라 여러 번 요청-응답을 해야 합니다.
하지만 HTTP/2.0은 멀티플렉싱 방식으로 여러 리소스를 한 번에 요청-응답할 수 있습니다.
바이너리 프로토콜
HTTP/2.0의 모든 데이터는 바이너리(0과 1)로 표현되는 프레임입니다. 모든 데이터가 바이너리로 표현되므로 디버그 하기 어려운 단점이 존재합니다. 하지만 기계는 텍스트보다 바이너리를 더 빨리 해석하므로 전반적으로 속도와 보안이 향상됩니다.
서버 푸시
서버 푸시 기능을 사용한다면 클라이언트가 서버에 요청하기도 전에 서버는 필요한 리소스를 예상하여 미리 클라이언트에게 응답할 수 있습니다.
예를 들어 클라이언트가 리소스 A라는 파일을 요청하고 추후 B라는 파일을 요청할 것으로 예상되면 서버는 A 파일과 B 파일을 함께 전달합니다.
헤더 압축
HTTP/2.0은 중복되는 헤더 프레임을 압축합니다. HPACK 표준으로 헤더를 간단하고 안전하게 압축할 수 있습니다.
HPACK
서버로 전송되기 전에 각 헤더의 값을 압축한 다음 전체 헤더 정보를 재구성하기 위해 이전에 전송된 헤더 값 목록에서 인코딩 정보를 찾습니다.
마무리
이번 포스팅에서는 HTTP 프로토콜 버전에 대해 알아보았습니다. 모든 버전을 간략하게 설명하느라 부족한 내용이 존재합니다. 부족한 내용은 추후 포스팅할 예정입니다.
'Web' 카테고리의 다른 글
[Web]MIME Type과 Content-Type (1) | 2022.04.02 |
---|---|
[Web]웹 서버(Web Server)와 웹 클라이언트(Web Client) (0) | 2022.04.02 |
댓글