2013-11-23 118 views
3

HTTP 1.1默认支持持久连接,所以我想使用与第一个HTTP请求时建立的连接相同的连接发送我的第二个http请求。这怎么能通过Qt来实现?QNetworkAccessManager和HTTP持久连接

如果我只是做了第二次请求后的第一个完成类似下面的

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

它似乎是一个新的TCP连接到服务器将启动(我有一个网络嗅探器检查) 实验还说:如果答复在 finished()信号内为deleteLater()或abort(),则连接将被关闭。

+0

您正在显示C++代码,但标签中包含“pyqqt pyqt4 pyside”。请提供可复制的代码示例;持久连接设置可能没有正确设置。 –

回答

1

你可以做下面的进一步调查:

  • 转储发出的请求的HTTP标头(俗称和原材料)。您应该看到一个Connection: Keep-Alive标题集。
  • 转储响应头。应该Connection: Close通过服务器

有时网络服务器不兑现keep-alive头,并将派close反正设定。在这种情况下,客户端正确地关闭连接。

+0

“连接:保持活动”位于响应标题中。 我想用第一个HTTP请求时设置的相同连接发送我的第二个http请求。这怎么能通过Qt来实现? – iMath

+0

实际上,你不应**必须做任何事情发送下一个请求在同一个连接(**到同一主机**),因为Qt将在内部重用TCP连接。你还可以从嗅探器中检查谁先发送TCP **'FIN' **包,客户端或服务器? –

+0

1)我在哪里可以看到Qt内部重用TCP连接的解释? 2)如果我不关闭()或deleteLater()回复,客户端或服务器都不会发送TCP FIN数据包。 – iMath