파이프라인 커넥션
HTTP/1.1은 지속 커넥션을 통해서 요청을 파이프라이닝할 수 있다.
HTTP 1.0 환경에서는 요청에 대한 응답이 와야 다음 응답을 보낼 수 있다.
반면, HTTP 1.1에서는 요청을 병렬로 처리할 수 있는 파이프라이닝(Pipelining) 기능을 지원한다.
결과적으로 HTTP 1.1에서는 여러 개의 요청을 처리하는 응답 속도가 훨씬 빨라지게 된다.
하지만 파이프라인에는 여러 가지 제약 사항이 있다.
-
HTTP 클라이언트는 커넥션이 지속 커넥션인지 확인하기 전까지는 파이프라인을 이어서는 안된다.
-
HTTP 응답은 요청 순서와 같게 와야 한다. HTTP 메시지는 순번이 있지 않기 때문에, 응답이 순서 없이 오면 순서에 맞게 정렬시킬 수 없음.
-
HTTP 클라이언트는 커넥션이 언제 끊어져도 완료되지 않은 요청이 파이프라인에 있으면 언제든 다시 요청을 보낼 수 있어야 한다.
예를 들어, 클라이언트가 지속 커넥션을 맺고 10개의 요청을 보낸다고 하더라도 서버는 5개의 요청만 처리하고 커넥션을 끊어버릴 수 있다.
남은 5개의 요청은 실패할 것이고 클라이언트는 커넥션을 다시 맺고 요청을 보낼 수 있어야 한다.
-
HTTP 클라이언트는 POST 요청과 같은 비멱등성 요청은 파이프라인을 통해 보내면 안됨.
에러가 발생하면 파이프라인을 통한 요청 중에 어떤 것들이 서버에서 처리되었는지 클라이언트가 알 수 없기 때문.