C++ - 连接关闭后发送 HTTP POST/GET
C++ - Sending HTTP POST/GET after connection has closed
我一直在 Whosebug 上搜索解决方案但似乎找不到答案,我正在使用 WinSock2 登录网站并且服务器响应 "Connection: close"(即使我发送连接: keep-alive) 在 header。在 returns 0 之后尝试接收任何消息。(0 = 正常关闭)
问题:
连接是否应该在 POST 请求后断开?
掉线后如何发送后续的GET/POST请求?
所以你是否必须像我下面的例子一样回收套接字和re-establish所有东西?
事件列表示例(我想我需要做的):
- WSA 启动
- 查找地址
- 创建套接字
- 使用地址连接套接字
- 发送Post请求
---Post---
后连接关闭
- 销毁套接字
- 创建套接字
- 使用地址连接套接字
- 发送带有身份验证 Cookie 的获取请求
这是我想象的事件链的样子,但我不是 100% 确定浏览器如何处理所有这些。但我从其他用户的经验和意见中学习,所以如果有人确切知道发生了什么,请告诉我。谢谢你的时间,
Is the connection suppose to drop after a POST request?
可以,是的。 HTTP 是一种无状态协议,即使请求保持连接,也无法保证连接在响应后保持连接。发送响应后是否关闭连接由服务器决定,如果客户端没有请求关闭连接。
How do you send subsequent GET/POST requests after it has dropped?
您别无选择,只能重新连接到服务器,并在发送新请求之前进行所有相关操作(TCP 握手、SSL/TLS 握手等)。
如果你:
发送 未 明确声明 Connection: keep-alive
的 HTTP 1.0 请求,或接收 未明确声明的 HTTP 1.0 响应 明确说明 Connection: keep-alive
发送明确声明 Connection: close
的 HTTP 1.1 请求,或接收明确声明 Connection: close
的 HTTP 1.1 响应
然后您必须在阅读响应后关闭您的连接端。
即使响应表明保持活动状态有效,连接仍可能超时并在您在同一连接上发送下一个请求之前关闭。
所以,任何时候你想发送一个新的请求,如果连接之前已经关闭,或者你在发送请求时遇到连接错误,关闭套接字,重新连接,然后重新发送请求。
So do you have to recycle the socket and re-establish everything again like my example below?
可能,是的。
I am not 100% sure how browsers handle all this.
完全如上所述。
这将在 RFC 2616 Section 8 "Connections" 中进一步讨论。
我一直在 Whosebug 上搜索解决方案但似乎找不到答案,我正在使用 WinSock2 登录网站并且服务器响应 "Connection: close"(即使我发送连接: keep-alive) 在 header。在 returns 0 之后尝试接收任何消息。(0 = 正常关闭)
问题:
连接是否应该在 POST 请求后断开?
掉线后如何发送后续的GET/POST请求?
所以你是否必须像我下面的例子一样回收套接字和re-establish所有东西?
事件列表示例(我想我需要做的):
- WSA 启动
- 查找地址
- 创建套接字
- 使用地址连接套接字
- 发送Post请求
---Post---
后连接关闭- 销毁套接字
- 创建套接字
- 使用地址连接套接字
- 发送带有身份验证 Cookie 的获取请求
这是我想象的事件链的样子,但我不是 100% 确定浏览器如何处理所有这些。但我从其他用户的经验和意见中学习,所以如果有人确切知道发生了什么,请告诉我。谢谢你的时间,
Is the connection suppose to drop after a POST request?
可以,是的。 HTTP 是一种无状态协议,即使请求保持连接,也无法保证连接在响应后保持连接。发送响应后是否关闭连接由服务器决定,如果客户端没有请求关闭连接。
How do you send subsequent GET/POST requests after it has dropped?
您别无选择,只能重新连接到服务器,并在发送新请求之前进行所有相关操作(TCP 握手、SSL/TLS 握手等)。
如果你:
发送 未 明确声明
Connection: keep-alive
的 HTTP 1.0 请求,或接收 未明确声明的 HTTP 1.0 响应 明确说明Connection: keep-alive
发送明确声明
的 HTTP 1.1 响应Connection: close
的 HTTP 1.1 请求,或接收明确声明Connection: close
然后您必须在阅读响应后关闭您的连接端。
即使响应表明保持活动状态有效,连接仍可能超时并在您在同一连接上发送下一个请求之前关闭。
所以,任何时候你想发送一个新的请求,如果连接之前已经关闭,或者你在发送请求时遇到连接错误,关闭套接字,重新连接,然后重新发送请求。
So do you have to recycle the socket and re-establish everything again like my example below?
可能,是的。
I am not 100% sure how browsers handle all this.
完全如上所述。
这将在 RFC 2616 Section 8 "Connections" 中进一步讨论。