我正在尝试创建使用持久连接的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之类的内置库。我需要做些什么才能使这项工作?
您不能在同一连接上发出2个HTTP请求,除非您已告知服务器您希望这样做。这是如何HTTP persistent connection
工作的。至少,您必须确保将其添加到您的请求标头中:
Connection: keep-alive
服务器对持久连接的支持有所不同,尽管服务器支持基本持久连接已变得很普遍。这是一个SO问题,询问“持久连接”到底是什么意思?
从此处开始,您将找到使持久连接正确工作所需的知识。您可能必须检查HTTP响应标头,以表明服务器将满足您的请求,或者您可能必须检查服务器在完成写入第一个响应时是否只是简单地关闭了连接。在通过持久连接的最终请求中,您还应该指定标头:
Connection: close
还要检查以下资源:
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句