HTTP 영속 접속

HTTP persistent connection

HTTP 영속적 접속(HTTP 킵얼라이브 또는 HTTP 접속 재사용이라고도 함)은 단일 TCP 연결을 사용하여 여러 HTTP 요구/응답의 송수신을 수행하는 개념입니다.단일 요구/응답 쌍에 대해 새로운 연결을 여는 것이 아닙니다.새로운 HTTP/2 프로토콜은 동일한 아이디어를 사용하며 단일 연결을 통해 여러 개의 동시 요청/응답이 다중화될 수 있도록 지원합니다.

작동

HTTP 1.0

HTTP 1.0 에서는,[1] 응답을 송신한 후, 항상 서버에 의해서 접속이 닫힙니다.

1996년 말부터 HTTP/1.0을 사용하는 인기 제품(브라우저, 웹 서버 등) 개발자들은 여러 요청/[2]응답에 대한 연결을 재사용할 수 있도록 하기 위해 프로토콜에 "keep-alive"라는 비공식 확장자를 추가하기 시작했습니다.[3]

클라이언트가 keep-alive를 지원하는 경우 요청에 헤더를 추가합니다.

접속: 킵얼라이브

서버가 이 요청을 수신하여 응답을 생성하면 킵얼라이브를 지원하는 경우 위의 동일한 헤더를 응답에 추가합니다.그 후 접속은 드롭되지 않고 열린 상태로 유지됩니다.클라이언트는 다른 요구를 송신할 때, 같은 접속을 클릭합니다.

클라이언트 또는 서버 중 하나가 컨버세이션이 종료되었다고 판단하고, 이 경우, 이 명령어를 생략할 때까지, 이 명령어는 계속 됩니다."Connection:"헤더에 "close" 키워드를 추가하는 것이 좋습니다.

연결: 닫기

그런 다음 지정된 규칙에 따라 연결이 닫힙니다.

1997년 이후 다양한 버전의 HTTP/1.1 사양에서는 이 비공식 확장의 사용이 인정되어 HTTP/1.0(킵얼라이브)과 HTTP/1.1 클라이언트/[4]서버간의 상호 운용성에 관한 몇 가지 경고가 포함되어 있습니다.

HTTP 1.1

HTTP 1.1에서는 특별히 [4]선언되지 않는 한 모든 접속은 영속적인 것으로 간주됩니다.HTTP 영속 접속에서는 개별 킵얼라이브 메시지가 사용되지 않습니다.단일 접속을 사용하는 것은 여러 요청뿐입니다.그러나 Apache httpd 1.3 및 2.0의 기본 연결 타임아웃은 15초이며[5][6] Apache httpd 2.2 이상일 경우 [7][8]5초입니다.짧은 타임아웃의 장점은 웹 페이지의 여러 컴포넌트를 신속하게 전달하면서 여러 서버 프로세스 또는 스레드를 장시간 [9]실행하는 데 리소스를 소비하지 않는다는 것입니다.

청크 전송 인코딩을 사용한 킵얼라이브

킵얼라이브를 사용하면 클라이언트는 특히 파이프라인HTTP [10]동작 중에 어떤 응답이 종료되고 다음 응답이 시작되는 장소를 판단하기가 어려워집니다.이것은 심각한 문제입니다.Content-Length스트리밍으로 [11]인해 사용할 수 없습니다.이 문제를 해결하기 위해 HTTP 1.1에서는 청크 전송 코딩이 도입되어 있습니다.last-chunk비트,[12]last-chunk비트는 클라이언트가 다음 응답이 어디서 시작되는지 알 수 있도록 각 응답 끝에 설정됩니다.

이점

RFC 7230 섹션 6.4에 따르면 "클라이언트는 특정 서버에 대해 유지하는 동시 오픈 접속 수를 제한해야 합니다."이전 버전의 HTTP/1.1 사양에서는 특정 최대값이 명시되어 있었습니다만, RFC 7230에 의하면, 「이것은 많은 애플리케이션에 있어서 실용적이지 않은 것이 판명되었습니다.대신...복수의 접속을 오픈할 때는 보수적입니다.이러한 가이드 라인은, HTTP 응답 시간을 향상시켜 congestion를 회피하는 것을 목적으로 하고 있습니다.HTTP 파이프라인이 올바르게 실장되어 있는 경우, 추가 접속에 의한 퍼포먼스상의 메리트는 얻을 수 없지만, 추가 접속에 의해 [13]congestion에 관한 문제가 발생할 가능성이 있습니다.

단점들

필요한 모든 데이터가 수신되었을 때 클라이언트가 연결을 닫지 않으면 서버에서 연결을 계속 열기 위해 필요한 리소스를 다른 클라이언트에서 사용할 수 없습니다.이것이 서버의 가용성에 미치는 영향과 자원을 사용할 수 없는 기간은 서버의 아키텍처와 구성에 따라 달라집니다.

, 서버가 TCP [14]접속을 닫는 것과 동시에 클라이언트가 서버에 요구를 송신하는 레이스 상태도 발생할 수 있습니다.서버는 접속을 닫기 직전에 클라이언트에 408 Request Timeout 상태 코드를 전송해야 합니다.클라이언트는 408 상태 코드를 수신하면 요청을 전송한 후 서버에 대한 새 연결을 열고 요청을 [15]다시 전송할 수 있습니다.모든 클라이언트가 요구를 재발송하는 것은 아니며 재발송신하는 클라이언트의 대부분은 요구에 아이돌 포텐턴트HTTP 메서드가 있는 경우에만 재발송신합니다.

웹 브라우저에서 사용

다중 연결과 영구 연결의 스키마입니다.

Google Chrome, Firefox, Internet Explorer(4.01 이후), Opera(4.[16]0 이후) Safari를 포함한 모든 최신 웹 브라우저는 영구 연결을 사용합니다.

기본적으로 Internet Explorer 버전6 및 7은 2개의 영구 연결을 사용하는 반면 버전8은 [17]6개를 사용합니다.영속적인 접속은, 비활성 상태가 60초 경과하면 타임 아웃이 됩니다.이것은 Windows [18]레지스트리에서 변경할 수 있습니다.

파이어폭스에서는 동시 접속의 수를 커스터마이즈 할 수 있습니다(서버 단위, 프록시 단위, 합계).영속적인 접속은,[19] 115 초(1.92 분)의 비액티비티 후에 타임 아웃이 되어, 설정에 의해서 변경할 수 있습니다.

「 」를 참조해 주세요.

  • HTTP 파이프라인: 응답을 기다리지 않고 여러 요청을 전송할 수 있습니다.
  • HTTP/2: 요청 및 응답의 순서가 다른 파이프라인 및 요청 전에 컨텐츠의 예측 푸시를 허용합니다.

레퍼런스

  1. ^ 하이퍼텍스트 전송 프로토콜(HTTP/1.0):운용 전반
  2. ^ "The TCP/IP Guide - HTTP Persistent Connection Establishment, Management and Termination". www.tcpipguide.com. Archived from the original on 2017-05-21. Retrieved 2017-12-31.
  3. ^ David Gourley; Brian Totty; Marjorie Sayer; Anshu Aggarwal; Sailu Reddy (2002). HTTP: The Definitive Guide. (excerpt of chapter: "Persistent Connections"). O'Reilly Media, inc. ISBN 9781565925090. Retrieved 2021-10-18.
  4. ^ a b 하이퍼텍스트 전송 프로토콜(HTTP/1.1):메시지 구문 및 라우팅, 지속성
  5. ^ Apache HTTP Server 1.3 – KeepAlive Timeout Directive
  6. ^ Apache HTTP Server 2.0 – KeepAlive Timeout Directive
  7. ^ Apache HTTP Server 2.2 – KeepAlive Timeout Directive
  8. ^ Apache HTTP Server 2.4 – KeepAlive Timeout Directive
  9. ^ Multiple (wiki). "Httpd/KeepAlive". Docforge. Archived from the original on January 6, 2010. Retrieved 2010-01-30.
  10. ^ "HTTP: What are the relations between pipelining, keep alive and server sent events".
  11. ^ "HTTP Streaming (or Chunked vs Store & Forward)".
  12. ^ "Chunked Transfer Coding". June 1999.
  13. ^ Nielssen, Frystyk Henryk; Gettys, James; Baird-Smith, Anselm; Prud’hommeaux, Eric; Wium Lie, Håkon; Lilley, Chris (October 1997), "Network Performance Effects of HTTP/1.1, CSS1, and PNG", Computer Communication Review, 27 (4), ISSN 0146-4833
  14. ^ "How do browsers handle HTTP keepalive race condition?".
  15. ^ Fielding, Roy T.; Reschke, Julian (June 2014). "Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content". {{cite journal}}:Cite 저널 요구 사항 journal=(도움말)
  16. ^ "Opera 4.0 Upgrades File Exchange: Includes HTTP 1.1". Opera Software. 2000-03-28. Retrieved 2009-07-08.
  17. ^ "IE8 speeds things up". Stevesouders.com. 2008-03-10. Retrieved 2009-07-17.
  18. ^ "How to change the default keep-alive time-out value in Internet Explorer". Microsoft. 2007-10-27. Retrieved 2009-07-17.
  19. ^ "Network.http.keep-alive.timeout". Mozillazine.org. Retrieved 2009-07-17.

외부 링크