http2? http1.1? what's the difference?

2019. 12. 8. 21:49Network

 

HTTP/2(HTTP/2.0) 은 HTTP 2의 major revision이다. 이는 구글의 SPDY protol 로부터 유래되었다.

http2 는 2015년 5월에 공개되었다. 

 

내 생각에 http2 에서 가장 주안해서 보아야할 점은 latency 의 개선이다.

( speeding up page loads and reducing round-trip time (RTT), especially on resource-heavy web pages)

기존의 http1.0 에서는 선요청에 대한 응답을 받은 후에 다른 요청이 처리될 수 있는 구조였다. 

이에 매 request 에 대해

-establish connection

-processing

-close connection

가 끊임없이 반복되었다. 그런데 이는 비효율적이기 때문에 1.1 에서 persistent connection 이라는 개념과 http pipelining 이라는 개념이 추가되었다. 이로 인해 connection 은 재사용될 수 있고 다수의 request 를 server 에 날릴 수 있게 되었다. 하지만 그렇다고 하더라도, request 를 보낸 순서에 따라 response를 받을 수 있다는 지점에서 문제가 발생하였다.

 

즉 server side blocking 이 발생하게 되는데 먼저 요청을 보낸 request 의 응답이 지연된다면 그 후 응답역시도 같이 지연된다는 문제점이 있다. (Head of Line Blocking)

 

domain sharding 등의 방법을 통해 성능 개선을 꾀했지만, 브라우저 별 도메인 커넥션 수 재한이 있어서 근본 해결책은 되지 못했다.

 

-Multiplexing  

http2 에서는 데이터를 전송할때 바이너리로 인코딩하여 전송한다.

http1.1 에서는 http 요청과 응답은 메세지(header, body)등의 데이터로 구성되어 있다 . 이에 반해 http2에서는 frame과 stream 이라는 개념이 추가되었다. n frames -> message, n message -> stream 

http1 에서는 request 와 response 가 구분되어 있었던 것에 비해 http2 에서는 stream 이라는 단위로 요청과 응답이 묶일수 있는 구조이다. 하나의 스트림이 다수개의 요청과 응답을 요청순서에 관게없이 처리할 수 있다. -> 중간에 응답이 블러킹되더라도 다른 response 들까지 blocking되는 head of blocking 이슈에서 벗어날 수 있다.  

 

-Binary protocols - text 기반 대신 binary 기반으로 데이터 통신을 진행한다. 대소문자 핸들링이나 whitespace 핸들링에 유리할 뿐더러 bandwidth 를 덜 소모하고 더 효율적이며 에러가 덜 발생하는 형태로 파싱된다.

 

- server push 

 - 자주 사용하는 리소스들을 케싱한다. 

 - websocket 과는 다름

 - 캐싱되지 않은 리소스를 받아오는 경우

 - 페이지에서 필요한 리소스가 페이지를 내려주는 서버에 있는 경우 유용.

 

- 헤더 압축으로 인한 성능 향상

 

- 보안 향상 : 웹 브라우저는 맺는 커넥션에 대한 encryption을 http/2 에서만 지원한다.