HTTP 클라이언트가 keep-alive를 사용하면 다음 구조를 갖는다.
HTTP Client
└── Connection Pool
└── TCP Connection 1
└── TCP Connection 2
└── TCP Connection N
요청을 보낼 때:
왜냐하면 HTTP/1.1 keep-alive 구조는 다음과 같다:
즉, 응답 body를 읽지 않은 상태에서 커넥션을 돌려버리면
다음 요청이 들어올 때 이전 응답의 남은 body가 들어있는 상태가 되어버린다.
예시:
응답1 바디: "HELLO WORLD...."
(여기서 절반만 읽음)
다음 요청 실행 →
서버는 응답 2 보내려고 준비
하지만 소켓에는 응답1의 남은 데이터가 남아 있음
이 상황이 발생하면 커넥션은 **손상된 상태(corrupted)**가 된다.
그래서 대부분의 HTTP 클라이언트는 다음과 같이 동작한다: