http端点是否会响应来自特定客户端的请求以便收到它们?
如果在代理后面的集群处理的请求或者使用NIO处理的请求中,一个请求比另一个请求完成得更快,那么它是否有意义呢?
是否有一种标准方法可以将唯一ID与每个http请求相关联以与响应相关联?如何在http组件httpclient或curl?
等客户端中处理问题归结为以下情况:
假设我正在从服务器下载文件并且请求未完成。客户端是否能够在相同的保持连接上完成其他请求?
答案 0 :(得分:5)
每当打开TCP连接时,源端口和目标端口以及IP地址都会识别连接。因此,如果我在目标端口80上连接到www.google.com(HTTP的默认设置),我需要一个操作系统将生成的免费源端口。
然后将Web服务器的回复发送到源端口(和IP)。这也是NAT工作的方式,记住哪个源端口属于哪个内部IP地址(反之亦然,用于传入连接)。
至于你的编辑:不,一个http连接可以同时执行一个命令(GET / POST / etc)。如果在从先前发出的命令中检索数据时发送另一个命令,则结果可能因客户端和服务器实现而异。例如,我想Apache会在发送第一个请求的数据后传输第二个请求的结果。
答案 1 :(得分:3)
我不会重写CodeCaster的答案,因为它的措辞非常好。
回应你的编辑 - 没有。它不是。单个持久性HTTP连接一次只能用于一个请求,否则会非常混乱。因为HTTP没有定义任何形式的请求/响应跟踪机制,所以根本不可能。
应该注意的是,还有其他协议使用类似的消息格式(符合RFC822),这允许这样做(使用诸如SIP's cSeq header之类的机制),并且它是可能的在自定义HTTP应用程序中实现它,但HTTP没有定义任何标准机制来执行此操作,因此无法做任何可以假定在任何地方工作的事情。它还会对第二条消息的响应产生问题 - 您是否在发送第二个响应之前等待第一个响应完成,或者在发送第二个响应时尝试暂停第一个响应?您将如何以保证消息不会被破坏的方式进行通信?
另请注意,SIP(通常)通过UDP运行,这不保证数据包排序,这使得cSeq系统成为必需品。
如果要在另一个事务仍在进行时向服务器发送请求,则需要创建与服务器的新连接,从而创建新的TCP流。
Facebook在构建CDN时对此做了一些研究,他们得出的结论是,您可以在任何时候有效地拥有2或3个开放的HTTP流,但由于额外的数据包开销,任何时候都会减少总体传输时间成本。如果我能找到链接,我会链接到博客条目......