4.1.1 Keep-alive

Keep-alive는 HTTP 하위의 TCP/IP 통신을 효율화한다. Keep-alive를 사용하지 않으면 요청마다 매번 새로운 커넥션을 만들어야 하지만, 킵얼라이브를 사용하면 여러 요청을 하나의 커넥션을 통해 사용한다.

이로인해 TCP 커넥션을 새로 연결하는데 드는 오버헤드가 사라지기 때문에 통신이 효율화된다.

4.1.2 파이프라이닝

파이프라이닝은 요청에 대한 응답이 오기도 전에 다음 요청을 보내는 기술이다. 다음 요청까지의 대기 시간을 없앰으로써, 네트워크 가동율을 높힌다. Keep-alive 사용을 전제로 하며 서버는 요청이 들어온 순서대로 응답을 반환한다.

그러나 실제로는 중간 경유지에 HTTP/1.0만 해석이 가능한 프록시가 있다면 제대로 동작하지 않는 경우도 있고, 파이프라이닝을 적절하게 구현하지 않거나 아예 기능이 구현되지 않은 브라우저들도 있다.

또한 파이프라이닝의 효과가 거의 없다는 사례들도 있다. 요청을 받은 순서대로 응답을 해야하므로, 시간이 오래걸리는 선행 응답이 있을 경우, 후속 응답들도 연달아 뒤로 밀리게 된다. 이러한 현상을 HOL(Head-Of-Line) 블러킹 문제라고 부른다.

클라이언트는 일단 서버에 요청을 연달아 보내고 응답을 받은 뒤에야 서버가 파이프라이닝을 지원하는지 알수 있으므로 파이프라이닝의 성능을 제대로 살리지 못한다는 단점도 있다.

하지만 파이프라이닝은 HTTP/2에서 스트림이라는 구조로 새롭게 구현되었다. 스트림은 파이프라인의 개념을 차용하고 문제들을 해결하였다.