본문 바로가기
웹/책 & 강의

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

by sun__ 2022. 1. 9.

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헤더 사용.