멍청한 프록시에서 keep-alive를 사용할 때 생기는 문제들이 있다.

프록시가 Connection 헤더를 제거하지 않고 업스트림으로 올려보내게 될 경우 다음과 같은 문제가 있다.

  1. 클라이언트는 Connection: Keep-Alive 헤더와 함께 요청을 함
  2. 멍청한 프록시는 Connection 헤더를 그대로 대상서버로 전달함
  3. 대상서버는 Connection: Keep-Alive 헤더를 받았으므로 멍청한 프록시와 계속 커넥션을 유지하게 됨
  4. 멍청한 프록시는 대상서버가 전달해준 Connection: Keep-Alive 응답을 그대로 클라이언트에게 전달함
  5. 멍청한 프록시는 Keep-Alive가 무엇인지도 이해하지 못하고, 해당 HTTP 트랜잭션은 완료됨. 그리고 대상서버가 응답을 끊기만을 기다리고 있음
  6. 그 상태에서 클라이언트가 다음 HTTP 트랜잭션을 보내게 되면, 프록시는 후속 트랙잭션이 온다는 것을 알지못하고 조용히 무시됨. 그래서 클라이언트는 프록시의 응답을 계속 기다리는 상황이 됨
  7. 따라서 두번째 요청을 처리되지 않고 행에 걸린상태로 유지됨

Proxy-Connection 살펴보기

앞선 문제를 해결하기 위해, 넷스케이프 및 몇몇 프록시 개발자들은 프록시를 사용할 경우, Connection 헤더가 아닌 Proxy-Connection 헤더를 사용함으로써 문제를 회피하고자 했음

하지만, 이 방식은 클라이언트와 서버 사이에 한개의 프록시가 있는 경우에만 유효함.