본문 바로가기
HTTP

HTTP_지속_커넥션

by 킴도TV 2022. 1. 25.

HTTP 완벽 가이드 의 글을 요약 및 가져왔습니다.

  • HTTP/1.0의 keep-alive 커넥션
    • 멍청한(dump) 프록시 vs 영리한 프록시
  • HTTP/1.1의 지속 커넥션
    • 기본으로 활성화
    • HTTP/1.1 애플리케이션은 트랜잭션이 끝난 다음 커넥션을 끊으려면 Connection: Close 헤더를 명시해야 한다. 이는 keep-alive 커넥션이 선택사항이 아닐 뿐만 아니라 지원 자체를 하지 않는다는 점에서 이전 HTTP 프로토콜과는 크게 다르다.

지속 커넥션(HTTP/1.1)의 제한과 규칙

  • 커넥션에 있는 모든 메시지가 자신의 길이 정보를 정확히 가지고 있을 때에만 커넥션을 지속시킬 수 있다. 예를 들어 엔티티 본문은 정확한 Content-Length 값을 가지거나 청크 전송 인코딩(Chunked transfer encoding)으로 인코드 되어 있어야 한다.
    • 이것이 바로 http 응답 메시지가 Content-Length를 HTTP 헤더에 보내는 이유이다.
  • HTTP/1.1 프락시 서버는 클라이언트가 커넥션 관련 기능에 대한 클라이언트의 지원 범위를 알고 있지 않은 한 지속 커넥션을 맺으면 안된다. 앞서 설명했듯이 오래된 프록시가 Connection 헤더를 전달하는 문제가 발생할 수 있기 때문이다. 현실적으로 이것이 쉽지는 않으며, 많은 벤더가 이 규칙을 지키지 않는다.
    => 바꿔 말하면 클라이언트가 HTTP/1.0의 keep-alive 를 지원하는지 지원하지 않는지 명확하지 않으면 지속 커넥션을 맺으면 안된다는 말인듯 하다. 즉, 더 쉽게 말하면  프락시 서버는 클라이언트가 keep-alive 를 지원하지 않는 경우에만 지속 커넥션을 맺어야 한다는 뜻이다.