C ++ - 连接关闭后发送HTTP POST / GET

时间:2016-08-23 19:19:25

标签: c++ http post winsock

我一直在StackOverFlow上搜索解决方案,似乎找不到答案,我使用WinSock2登录网站,服务器响应"连接:关闭&#34 ; (即使我发送Connection:keep-alive)也在标题中。在返回0之后尝试recv的任何消息。(0 =正常关闭)

问题:

  1. 在POST请求后连接是否会丢失?

  2. 如何在删除后发送后续GET / POST请求?

  3. 那么你是否必须回收套接字并重新建立所有内容,如下面的示例所示?

    事件列表示例(我想象我需要这样做):

    1. 调用WSAStartup
    2. 查找地址
    3. 创建套接字
    4. 使用地址连接套接字
    5. 发送请求
    6. ---发布后连接关闭--​​-

      1. 消灭套接字
      2. 创建套接字
      3. 使用地址连接套接字
      4. 使用身份验证Cookie发送获取请求
      5. 这就是我想象事件链的样子,但我并不是百分之百确定浏览器如何处理这一切。但我从其他用户的经验和输入中学习,所以如果有人确切知道发生了什么让我知道。谢谢你的时间,

1 个答案:

答案 0 :(得分:2)

  

在POST请求后连接是否会丢失?

可以,是的。 HTTP是无状态协议,即使请求保持活动,也无法保证连接在响应后保持活动状态。发送响应后是否关闭连接由服务器决定,如果客户端没有请求关闭连接。

  

如何在丢弃后发送后续GET / POST请求?

在发送新请求之前,您别无选择,只能重新连接到服务器以及涉及的所有内容(TCP握手,SSL / TLS握手等)。

如果你:

  • 发送明确声明Connection: keep-alive的HTTP 1.0请求,或者接收明确声明{{1}的HTTP 1.0响应}}

  • 发送明确指出Connection: keep-alive的HTTP 1.1请求,或接收明确指出Connection: close的HTTP 1.1响应

然后,您必须在阅读回复后关闭连接的末尾。

即使响应表明保持活动有效,在您在同一连接上发送下一个请求之前,连接仍可能超时并关闭。

因此,每当您想要发送新请求时,如果先前已经关闭了连接,或者在发送请求时出现连接错误,请关闭套接字,重新连接并重新发送请求。

  

那么你是否必须回收套接字并重新建立所有内容,如下面的示例所示?

可能,是的。

  

我不是100%确定浏览器如何处理这一切。

正如上文所述。

这在RFC 2616 Section 8 "Connections"中进一步讨论。