2013-11-23 4 views
3

HTTP 1.1 поддерживает постоянное соединение по умолчанию, поэтому я хочу отправить второй HTTP-запрос с использованием того же соединения, которое было настроено при первом запросе HTTP. как это можно достичь через Qt?QNetworkAccessManager и постоянное соединение HTTP

Если я просто сделать второй запрос после того, как первый один закончил как следующий

manager->get(QNetworkRequest(QUrl("http://qt-project.org"))); 

, кажется, новое соединение TCP сервер будет запущен (я проверил с помощью сетевого сниффера) Эксперимент также говорит: Если в ответ finished() ответ будет удаляться() или abort(), соединение будет закрыто.

+0

Вы показываете код C++, но «pyqqt pyqt4 pyside» включены в теги. Просьба представить образец воспроизводимого кода; возможно, что настройка постоянного соединения не установлена ​​правильно. –

ответ

1

Вы можете сделать следующее для дальнейшего изучения:

  • Дампа HTTP заголовков (известные и необработанные) от исходящего запроса. Вы должны увидеть набор заголовков Connection: Keep-Alive.
  • Дамп заголовков ответа. Там не должен быть Connection: Close установлен веб-сервер

Иногда вебсерверов не чтили заголовок keep-alive и отправить close в любом случае. В этом случае клиент по праву закрывает соединение.

+0

«Соединение: keep-alive» находится в заголовке ответа. Я хочу отправить второй запрос http, используя то же соединение, которое было настроено при первом запросе HTTP. как это можно достичь через Qt? – iMath

+0

На самом деле вы ** не должны ** делать что-либо для отправки следующего запроса в том же соединении (** на тот же хост **), поскольку Qt будет внутренне повторно использовать TCP-соединение. Можете ли вы также проверить у сниффера, кто первым отправляет TCP ** 'FIN' ** пакет, клиент или сервер? –

+0

1) где я могу увидеть объяснение Qt, повторно использующего TCP-соединение? 2) если я не закрываю() или deleteLater() ответ, ни клиент, ни сервер не посылают пакет TCP FIN. – iMath

Смежные вопросы