Keep-alive 헤더 설명


106

사이트 구축 요청을 받았는데 공동 개발자 중 한 명이 연결 유지 헤더를 포함해야한다고 말했습니다.

나는 그것에 대해 많이 읽었지만 여전히 질문이 있습니다.

msdn->

개방형 연결은 서버가 각 요청에 대한 콘텐츠를 더 빨리 반환 할 수 있기 때문에 클라이언트가 웹 페이지 콘텐츠에 대해 여러 요청을 할 때 성능을 향상시킵니다. 그렇지 않으면 서버는 모든 요청에 ​​대해 새 연결을 열어야합니다.

보고

여기에 이미지 설명 입력

  • 는 IIS (F)를 보낼 때 keep alive헤더 ( 또는 사용자가 연결 유지 전송 ), 그 (뜻인가 E, C, B단지 내 세션에있는 연결 저장)을?
  • 이 정보는 어디에 보관 됩니까 ( "이 연결은"Royi "에 속함 )?
  • 다른 사람이 그 연결을 사용할 수 없다는 의미입니까?
  • 그렇다면-헤더 유지-중복 된 연결 사용자의 수를 줄인다는 의미입니까?
  • 그렇다면 연결이 나에게 얼마나 오래 저장됩니까? (즉, 만약 내가 keep alive를 설정하면 언제까지 "keep"?)

관심있는 사람들을위한 ps :

이 샘플 페이지 를 클릭하면 연결 유지 헤더가 반환됩니다.


2
Pfff, 나는 이것을 강의에서 보았지만 확실하지 않습니다. 연결 유지는 서버와 사용자에게만 있다고 생각했습니다. 결국, 그 사이의 모든 것은 헤더를 보는 것은 고사하고 HTTP인지조차 알지 못합니다.
Noctua

MSDN에서 인용 한 진술은 drivel입니다. 그것은이다 클라이언트 에는 연결 유지가없는 경우 새 연결을 열 수 있습니다.
Marquis of Lorne

웹 서버 나 클라이언트가 아닌 사이트를 구축하는 경우 킵 얼라이브 헤더가 이미 완료되었습니다.
Marquis of Lorne

답변:


145

이 정보는 어디에 보관 되나요 ( "이 연결은 컴퓨터 A와 서버 사이 F")?

TCP 연결은 소스 IP와 포트 및 대상 IP와 포트로 인식됩니다. 사용자의 OS, 모든 중간 세션 인식 장치 및 서버의 OS는이를 통해 연결을 인식합니다.

HTTP는 요청-응답과 함께 작동합니다. 클라이언트는 서버에 연결하고 요청을 수행하고 응답을받습니다. 연결 유지가 없으면 각 응답 후 HTTP 서버에 대한 연결이 닫힙니다. HTTP 연결 유지를 사용하면 특정 기준이 충족 될 때까지 기본 TCP 연결을 열어 둡니다.

이를 통해 단일 TCP 연결을 통한 다중 요청-응답 쌍을 허용하여 TCP의 상대적으로 느린 연결 시작의 일부를 제거합니다.

IIS (F)가 연결 유지 헤더를 보낼 때 (또는 사용자가 연결 유지 헤더를 보낼 때), 이는 (E, C, B) 연결을 저장한다는 의미입니까?

아니요. 라우터는 세션을 기억할 필요가 없습니다. 사실, 동일한 TCP 세션에 속하는 여러 TCP 패킷이 모두 동일한 라우터를 통과 할 필요는 없습니다. 즉, TCP가 관리하기위한 것입니다. 라우터는 최상의 IP 경로를 선택하고 패킷을 전달합니다. Keep-alive는 클라이언트, 서버 및 기타 중간 세션 인식 장치에만 해당됩니다.

내 세션에만 해당합니까?

다른 사람이 그 연결을 사용할 수 없다는 의미입니까?

이것이 TCP 연결의도입니다 . 이는 두 당사자만을위한 종단 간 연결입니다.

그렇다면-헤더 유지-중복 된 연결 사용자의 수를 줄인다는 의미입니까?

"겹친 연결"을 정의합니다. 다음 과 같은 장점과 단점에 대해서는 HTTP 영구 연결 을 참조하십시오 .

  • 더 적은 수의 연결이 동시에 열리기 때문에 CPU 및 메모리 사용량이 낮습니다.
  • 요청 및 응답의 HTTP 파이프 라이닝을 활성화합니다.
  • 네트워크 정체 감소 (TCP 연결 감소).
  • 후속 요청의 지연 시간 감소 (핸드 쉐이킹 없음).

그렇다면 연결이 나에게 얼마나 오래 저장됩니까? (즉, 만약 내가 keep alive를 설정하면 언제까지 "keep"?)

일반적인 연결 유지 응답은 다음과 같습니다.

Keep-Alive: timeout=15, max=100

예를 들어 HTTP (Hypertext Transfer Protocol) Keep-Alive Header 를 참조하십시오 ( keep-alive 헤더가 26162086 보다 자세히 설명 된 HTTP / 2 용 초안 ).

  • 호스트는 timeout매개 변수 값을 호스트가 유휴 연결이 닫히기 전에 열린 상태로 유지되도록 허용하는 시간으로 설정합니다 . 호스트에서 데이터를 보내거나받지 않으면 연결이 유휴 상태입니다.

  • max매개 변수는 클라이언트가 만들거나 서버가 영구 연결에서 만들 수있는 최대 요청 수를 나타냅니다. 지정된 수의 요청 및 응답이 전송되면 매개 변수를 포함하는 호스트가 연결을 닫을 수 있습니다.

그러나 서버는 임의의 시간 또는 요청 횟수 후에 연결을 자유롭게 닫을 수 있습니다 (현재 요청에 대한 응답을 반환하는 한). 이것이 구현되는 방법은 HTTP 서버에 따라 다릅니다.


"중복 된 연결"정의 ----> 동시에 의미합니다. ? 내가 맞다 .... ". 연결 X 그것을 연결 유지 헤더를 사용 원인 존을 위해 예약되어 있습니다"(나는 당신이 말한대로하기 때문에 동시 연결의 수가 감소 될 것이라고 생각
Royi Namir

1
그래서 당신이 말하는 것은 서버가 한 번에 100 개의 연결을 처리 할 수 ​​있고 모든 연결이 keep-alive를 사용한다면 101 번째 연결은 덤프 될 것입니다 ???
Royi Namir

1
@Royi 아니요, 브라우저가 주어진 호스트에 얼마나 많은 연결 유지 연결을 만드는지 모르겠지만 브라우저가 하나만 열 것이라고 말하려는 것은 아닙니다. 동시에 요청하는 양은 제한되며 브라우저마다 다릅니다 . 브라우저가 연결 유지 연결을 사용하는 경우 N요청을 실행하는 대신N 하는 (기본적으로 모든 응답 후에 연결이 닫히기 때문에) 예를 들어 여러 요청을 실행할 수 있기 때문에 연결을 N통해 요청을 실행 N / M하거나 M연결 만 실행할 수 있습니다. 각 열린 연결이므로 더 적게 사용할 수 있습니다.
CodeCaster

1
나는 그것을 알고 있습니다. (:-)) 당신은 당신의 의견에서 말했다 : 연결 유지를 사용할 때 클라이언트는 덜 동시 연결을 만들 것이며 병렬이 아닌 직렬로 요청을 실행 합니다. 나는 그것이 Keepalive와 어떻게 관련되는지 이해하지 못합니다.
Royi Namir

5
E, C, B는 세션을 저장하지 않습니다. 그것들은 라우터이고, 세션 테이블이없고 필요하지 않습니다. 동일한 TCP 클라이언트-서버 세션의 여러 패킷이 다른 경로를 따를 수 있기 때문입니다. 라우터의 역할은 최적의 IP 경로를 선택하고 그에 따라 패킷을 전달하는 것이므로 전송 계층 (TCP / UDP)으로 이동하지 않으며 연결 유지 헤더를보기 위해 애플리케이션 계층으로 이동하지 않습니다. 그래서 기본적으로 클라이언트와 서버 사이에 명시되어 살아-유지하고, 암시 적으로는 세션 인식 장치가 firewalls-이 명시 적으로 클라이언트와 서버 세션에 열려 -eg 수 있습니다
아민 Kadimi
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.