2013-11-23 2 views
3

HTTP 1.1은 기본적으로 영구 연결을 지원하므로 첫 번째 HTTP 요청이 생성되었을 때 설정된 동일한 연결을 사용하여 두 번째 http 요청을 보내려고합니다. 이것이 Qt를 통해 어떻게 달성 될 수 있습니까?QNetworkAccessManager 및 HTTP 영구 연결

단순히 실험 첫 번째는 다음

가 서버에 새로운 TCP 연결이 시작됩니다 보인다
manager->get(QNetworkRequest(QUrl("http://qt-project.org"))); 

같은 완료 한 후 두 번째 요청은 (내가 네트워크 스니퍼로 체크 한) 한 경우 또한 : 응답이 finished() 신호 내에서 deleteLater() 또는 abort() 인 경우 연결이 닫힙니다.

+0

C++ 코드를 표시하고 있지만 "pyqqt pyqt4 pyside"가 태그에 포함되어 있습니다. 재현 가능한 코드 샘플을 제공하십시오. 지속적 연결 설정이 올바르게 설정되지 않았을 수 있습니다. –

답변

1

당신은 추가로 조사하기 위해 다음을 수행 할 수 있습니다

  • 가 보내는 요청의 HTTP 헤더 (알려진 원시)를 덤프합니다. Connection: Keep-Alive 헤더 세트가 표시되어야합니다.
  • 응답 헤더를 덤프하십시오. 하지

때때로의 웹 서버가 keep-alive 헤더를 존중하지 않고 어쨌든 close를 보내드립니다 웹 서버가 설정 한 Connection: Close이 있어야합니다. 이 경우 클라이언트가 연결을 올바르게 종료합니다.

+0

"연결 : 연결 유지"가 응답 헤더에 있습니다. 첫 번째 HTTP 요청이 생성되었을 때 설정 한 것과 동일한 연결을 사용하여 두 번째 http 요청을 보내려고합니다. 이것이 Qt를 통해 어떻게 달성 될 수 있습니까? – iMath

+0

Qt가 내부적으로 TCP 연결을 재사용하기 때문에 실제로 같은 연결 (** 동일한 호스트 **)에서 다음 요청을 보내려면 ** 아무 것도하지 않아도됩니다. TCP **'FIN' ** 패킷을 먼저 보내고있는 사람, 클라이언트 또는 서버를 스니퍼에서 확인할 수 있습니까? –

+0

1) Qt가 내부적으로 TCP 연결을 재사용하는 것에 대한 설명은 어디서 볼 수 있습니까? 2) 내가 회신을 닫지() 또는 삭제()하지 않으면 클라이언트 나 서버가 TCP FIN 패킷을 보내지 않습니다. – iMath

관련 문제