Thief of Wealth

HTTP 2.0가 탄생한 이유가 뭔지에 대해서 설명하는 장.

 

http 2.0은 TCP 커넥션 위에서 동작한다.

TCP 커넥션을 초기화하는 것은 클라이언트이며, 프레임들에 담기 요청과 응답을 처리한다.

하나의 커넥션 윙에 여러 개의 스트림이 동시에 만들어질 수 있으므로, 여러 개의 요청과 응답을 동시에 처리하는 것 역시 가능하다.

HTTP 2.0은 이들 스트림에 대한 흐름제어와 우선순위 부여 기능도 제공한다.

 

HTTP 2.0은 기존의 요청-응답과는 약간 다른 새로운 상호작용 모델인 서버-푸시를 도입했다.

이를 통해 서버는 클라이언트에게 필요하다고 생각하는 리소스라면 명시적으로 받지 않더라도 능동적으로 클라이언트에게 보내줄 수 있다.

 

10.3 HTTP 1.1과의 차이

- 프레임

HTTP2.0에서 모든 메시지는 프레임에 담겨 전송된다.

모든 프레임은 8바이트 크기의 헤더로 시작하며, 최대 16383바이트 크기의 페이로드가 온다.

이 프레임은 10가지 종류가있다.

 

- 스트림과 멀티플렉싱

한쌍의 HTTP 요청과 응답은 하나의 스트림을 통해 이루어진다.

HTTP1.1에서는 한 TCP 커넥션을 통해서 요청을 보냈을때 그에 대한 응답이 도착하고 나서야 같은 TCP 커넥션으로 다시 요청보내기 가능.

그래서 회전지연이 발생한다.

웹브라우저는 회전지연을 줄이는 방법으로 여러개의 TCP 커넥션을 만들어서 동시에 여러개의 요청을 보내는 방법을 사용하고 있다.

그렇다고 TCP 커넥션을 무한정 만들수는 없기 때문에 회전지연은 어떻게든 마주할 수 밖에 없긴하다.

 

HTTP2.0에서는 스트림이 동시에 열릴 수 있다.

따러서 하나의 HTTP2.0 커넥션을 통해서 여러개의 요청이 동시에 보내질 수 있기 때문에 이 문제를 쉽게 해결할 수 있다.

스트림은 우선순위도 가질 수 있다.

 

- 헤더 압축

HTTP 1.1에서 헤더는 아무런 압축없이 그대로 전송되었다.

과거에는 웹페이지 하나를 방문할 때의 요청이 많지 않았기 때문에 헤더의 크기가 그다지 큰 문제가 되지 않았다.

하지만 요즘에는 웹페이지 하나를 보기위해서 수십에서 많으면 수백번의 요청을 보내기 때문에 회전지연과 대역폭 양쪽 모두에 실질적으로 영향을 미치게 되었다.

HTTP2.0에서는 HTTP 메시지의 헤더를 압축하여 전송하는 기능을 제공한다. (HPACK)

 

- 서버 푸시

http2.0은 서버가 하나의 요청에 대해 응답으로 여러개의 리소스를 보낼 수 있도록 해준다.

html 문서를 요청받은 서버는 그 html 문서가 링크하고 있는 image, css파일, js파일 등의 리소스를 클라이언트에게 푸시할 수 있을 것이다.

이는 클라이언트가 html문서를 파싱해서 필요한 리소스를 다시 요청하여 발생하는 트래픽과 회전지연을 줄여준다.

 

10.4 알려진 보안 이슈

- 중재자 캡슐화 공격

http2.0 메시지를 중간의 프락시가 http1.1 메시지로 변환할때 메시지의 의미가 변질될 가능성이 있다.

http2.0는 헤더필드의 이름과 값을 binary로 인코딩하는데 http2.0이 헤더필드로 어떤 문자열이든 사용할 수 있게된다.

이것이 http2.0 요청이나 응답이 불법적이거나 위조된 http1.1 메시지로 번역되는 것을 유발할 수 있다.

(http1.1에서 http2.0으로 변환할때는 이런 문제가 생기지 않는다.)

 

- 긴 커넥션 유지로 인한 개인정보 누출 우려

어떤 사용자가 브라우저를 사용할때, 그 사용자는 이전에 그 브라우저를 사용했던 사용자가 무엇을 했는지 알아낼 가능성이 있음.

 

profile on loading

Loading...