2013-11-23 164 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