웹/책 & 강의

HTTP 완벽가이드 - 4장 (커넥션 관리)

sun__ 2022. 1. 9. 14:41

HTTP 커넥션은 몇몇 사용 규칙을 제외하고는 TCP 커넥션에 불과함. 

 

TCP는 포트번호를 통해 여러 개의 커넥션을 유지한다. IP주소로 해당 컴퓨터에 연결되고 포트번호는 해당 애플리케이션으로 연결된다. 

 

TCP커넥션은 네가지 값으로 식별. <발신지 IP, 발신지 포트, 수신지 IP, 수신지 포트>. 

 

네가지 값이 같은 TCP커넥션은 유일함.

 

클라이언트-서버 TCP 소켓 인터페이스 사용하여 상호작용

 

HTTP 트랜잭션 지연

  • 크기가 작은 HTTP 트랜잭션은 50%이상의 시간을 TCP를 구성하는 데에 사용함. 이미 존재하는 커넥션을 재활용해서 최적화 해야함. 아래는 관련 TCP 단에서 사용하는 기술
    • 확인응답 지연
    • TCP slow start
    • 네이글 알고리즘 & TCP_NODELAY
    • TIME_WAIT의 누적과 포트 고갈

 

HTTP 커넥션 관리 - 커넥션을 생성하고 최적화하는 HTTP 기술

keep-alive 

Connection: Keep-Alive
Keep-Alive: max=5, timeout=120
#서버가 약 5개의 추가 트랜잭션이 처리될 동안 커넥션을 유지하거나, 2분동안 커넥션을 유지하라는 내용의 Keep-Alive응답헤더

 

dumb proxy

클라이언트 - 프락시 - 서버 구조에서 프락시가 Connection헤더를 이해하지 못해서 발생하는 문제

  • 클라이언트가 Connection헤더를 갖는 요청을 보내면 서버는 프락시가 커넥션을 유지하자고 요청하는 것으로 잘못 판단함. (프락시->서버 시점)
  • 클라이언트는 프락시가 커넥션을 유지하는 것에 동의했다고 추정함 (프락시->클라이언트 시점)
  • 프락시는 Connection헤더를 이해하지 못하므로 커넥션이 끊어지길 기다리고 서버와 클라이언트는 커넥션을 유지함
  • 클라이언트가 다음 요청을 보내면, 그 요청은 프락시로부터 무시되고 브라우저는 응답없이 로드중이라고 표시됨

-> 프락시는 Connection헤더를 전달하면 안됨. Proxy-Connection헤더 사용.