HTTP终点是否应该响应特定客户端的请求,以便收到他们?

如果在代理后面的群集处理或使用NIO处理的请求处理的情况下,一个请求比另一个请求更快地完成的请求是没有意义的呢?

是否有将唯一ID与每个HTTP请求关联以与响应相关联的标准方法? HTTP Componenets HTTPClient或Curl等客户端如何处理?

问题归结为以下情况:

假设我正在从服务器下载文件,并且该请求未完成。客户是否能够在相同的静脉连接上完成其他请求?

有帮助吗?

解决方案

我不会重新编写CodeCaster的答案,因为它的措辞很好。

响应您的编辑 - 不。它不是。单个持久性HTTP连接只能一次用于一个请求,否则会感到非常困惑。由于HTTP没有定义任何形式的请求/响应跟踪机制,因此根本不可能。

应该注意的是,还有其他协议使用类似的消息格式(符合 RFC822),这确实允许这样做(使用诸如 SIP的CSEQ标头),并且可以在自定义的HTTP应用程序中实现此功能,但是HTTP并未定义任何这样做的标准机制,因此,无能为力可以假定无处不在。这也会给第二封消息的响应带来一个问题 - 您是否等待第一个响应完成,然后再发送第二个响应,或者在发送第二个响应时尝试暂停第一个响应?您将如何以保证消息不会损坏的方式进行交流?

还请注意,SIP(通常)通过UDP运行,这不能保证数据包订购,从而使CSEQ系统更加必要。

如果您想在进行其他交易的过程中将请求发送到服务器,则需要与服务器创建新的连接,因此需要新的TCP流。

Facebook在他们建立CDN时对此进行了一些研究,他们得出的结论是,您一次可以有效地拥有2或3个开放的HTTP流,但由于额外的包装额外成本,还可以减少整体转移时间。如果我能找到链接,我将链接到博客条目...

其他提示

每当打开TCP连接时,连接都会由源和目标端口和IP地址识别。因此,如果我在目标端口80上连接到www.google.com(http的默认值),则需要一个免费的源端口。

然后将Web服务器的答复发送到源端口(和IP)。这也是NAT的工作原理,记住哪个源端口属于哪个内部IP地址(反之亦然,用于传入连接)。

至于您的编辑:不,单个HTTP连接可以同时执行一个命令(get/post/etc)。如果您在从先前发布的命令中重新删除数据时发送另一个命令,则每个客户端和服务器实现的结果可能会有所不同。我想例如,Apache将在发送第一个请求的数据后传输第二个请求的结果。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top