일단 http의 정의는 다음과 같다.
인터넷에서 하이퍼텍스트(hypertext) 문서를 교환하기 위하여 사용되는 통신규약이다.
하이퍼텍스트는 문서 중간중간에 특정 키워드를 두고 문자나 그림을 상호 유기적으로 결합하여 연결시킴으로써, 서로 다른 문서라 할지라도 하나의 문서인 것처럼 보이면서 참조하기 쉽도록 하는 방식을 의미한다.
[네이버 지식백과] HTTP [hypertext transfer protocol] (두산백과)
여기에서 중요한 것은 하이퍼텍스트인데 처음부터 하이퍼텍스트가 제공 되었던 것은 아니고
초기에는 단순히 새로운 텍스트를 연결하는 링크만 제공할 뿐이었다.
그러다가 그림, 동영상 같은 미디어 결합이 추가되면서 서서히 발전해나갔고
그 과정 속에서 http1.0, http1.1, http2.0 처럼 버전이 생겨나게 되었다.
HTTP1.0
http1.0 은 최초 버전으로 HTML 문서를 송/수신하기 위한 GET Method 와 HTML 파일을 위주로
통신이 이루어졌다. Request Header부분과 이를 new line으로 개행한 뒤 body를 보내는 것이
HTTP 1.0의 프로토콜 이었는데 하나의 데이터를 가져올 때마다 커넥션을 연결하고 닫는 동작이
반복되는 구조였다.
HTTP1.1
HTTP 1.1 같은 경우는 HTTP 1.0의 구조를 확장되어
현재 사용되는 HTTP Method 및 각종 미디어 타입에 대한 지원 등이 이때 추가가 되게 된다.
GET 외에 POST , PUT, DELETE, PATCH 같은 HTTP Method 정의가 추가되었고
HTTP Status Code 에 대한 정의가 추가되었다(2xx, 3xx, 4xx, 5xx)
또한 한번 맺은 커넥션을 유지하는 기능이 추가되면서 연결시마다 커넥션을 열고 닫는 동작으로
반복하지 않아도 되게 되었다.
다만 기본적으로 커넥션당 하나의 요청과 응답을 처리하기 때문에
동시전송 문제와 다수의 리소스를 처리하기에 속도와 성능 이슈를 가지고 있었다.
물론 여러개의 커넥션을 열어서 여러개의 자원을 한번에 가져오는 방법도 있었지만
어찌되었건 하나의 커넥션으로 하나의 요청, 응답만 처리할 수 있다는 점은 마찬가지였다.
또한 헤더가 너무 크다는 문제도 가지고 있었다.
HTTP2.0
HTTP2.0 에서 가장 눈에 띄게 변화한 점은
아래와 같은 기능이 추가되어 HTTP1.0의 성능과 속도문제가 획기적으로 개선되었다는 점이다.
Header Compression : Header 정보를 허프만코드 압축방식 이용하여 전송하는 방식을 채택한다.
Multiplexed Streams : 한 커넥션에 여러개의 메세지를 동시에 주고 받을 수 있게 되었다.
Server Push : HTTP/1.1에서는 클라이언트에서 요청한 데이터만 서버에서 제공받았던 반면
HTTP2.0 에서는 요청에 없더라도 연관된 데이터를 함께 전송할 수 있는 기능이 추가되었다.
Stream Priority : 요청 리소스간 의존관계를 설정하여 먼저 필요한 자원이 먼저 전송되도록 한다.
가령 이미지파일과 CSS파일을 요청했다고 하면 CSS파일이 늦게올 경우 전체적인 랜더링이
느려질 수 있는데 이미지파일이 CSS파일에 의존성이 있다고 설정하면 CSS파일이 우선 전송되어
순조롭게 랜더링이 가능하다.
'Base > 개념정리' 카테고리의 다른 글
32비트, 64비트 차이점? (0) | 2021.04.02 |
---|---|
TCP/UDP 그리고 IP (0) | 2021.04.02 |
페이로드(payload) (0) | 2021.04.02 |
User-Agent (0) | 2021.04.02 |
DAO와 Repository (0) | 2021.04.02 |