Ruby:持久性 HTTP 客户端未收到第二个请求的响应

Posted

技术标签:

【中文标题】Ruby:持久性 HTTP 客户端未收到第二个请求的响应【英文标题】:Ruby: Persistent HTTP client not receiving response on second request 【发布时间】:2016-05-30 04:07:29 【问题描述】:

我正在尝试创建一个使用持久连接的 HTTP 客户端。我的代码在我发送第一个请求并获得第一个响应时有效。但是,当我发送第二个请求时,我无法获得第二个响应。我不确定为什么?我在用 C 编码时遇到了同样的错误。

这里是代码

require 'socket'
include Socket::Constants
socket = Socket.new( AF_INET, SOCK_STREAM, 0 )
sockaddr = Socket.pack_sockaddr_in( 80, 'www.google.com' )
socket.connect( sockaddr )

# This Works
socket.write( "GET / HTTP/1.0\r\n\r\n" )
results = socket.read

# This Works
socket.write( "GET / HTTP/1.0\r\n\r\n" )
# THIS DOESN'T WORK
results = socket.read

我不想使用像 Net::HTTP 这样的内置库。我需要做什么才能完成这项工作?

【问题讨论】:

*** 并非旨在为您完成任务。请阅读***.com/help/how-to-ask 【参考方案1】:

您不能在同一个连接上发出 2 个 HTTP 请求,除非您已告知服务器您希望这样做。这就是HTTP persistent connection 的工作原理。至少,您必须确保将其添加到您的请求标头中:

Connection: keep-alive

服务器对持久连接有不同的支持,尽管服务器支持基本的持久连接已经很常见。这是一个问What exactly does a “persistent connection” mean?

的问题

从那里开始,您将找到使持久连接正常工作所需的知识。您可能需要检查 HTTP 响应标头以了解服务器是否会满足您的请求,或者您可能必须检查服务器在完成写入第一个响应时并没有简单地关闭连接。在通过持久连接的最终请求中,您还应该指定标头:

Connection: close

还可以查看以下资源:

IETF HTTP 1.1 specification W3 HTTP 1.1 section 8: Persistent Connections Safari Books Online HTTP: The Definitive Guide - Persistent Connections

【讨论】:

感谢您的帮助!已排序! @OmarHijazi 我很高兴听到这个消息。祝你的项目好运!

以上是关于Ruby:持久性 HTTP 客户端未收到第二个请求的响应的主要内容,如果未能解决你的问题,请参考以下文章

非主要收款人未收到付款

HTTP客户端

使用 UISearchController 推送的第二个视图控制器在 UINavigationBar 中未收到触摸

Socket.io 客户端未收到事件

《图解 HTTP 》阅读 —— 第二章

Web应用程序状态管理(上)