将Keep-alive杀死异步连接

时间:2014-02-10 03:36:40

标签: javascript http asynchronous browser keep-alive

假设我的浏览器向域发布了一个HTTP请求,在此请求完成之前,另一个不同的请求(通过ajax)被发送到同一个域。由于第一个请求仍在进行但尚未终止,这是否意味着第二个请求必须等待第一个请求才能完成以便使用第一个请求使用的持久连接?如果是,如何防止这种情况?如果我在第一个请求中有一个长流连接,这是否意味着第二个请求需要长时间闲置?

(假设浏览器的最大持久连接是一个。实际上我并不真正理解这个“最大持久连接”的作用。这是否意味着当持久连接超过最大数量时,其余的连接将变为非执着的?令人困惑的......)

任何人都能解释一下吗?

1 个答案:

答案 0 :(得分:1)

  

由于第一个请求仍在进行且尚未终止,这是否意味着第二个请求必须等待第一个请求才能完成以便使用第一个请求使用的持久连接?<​​/ p>

没有。这两个请求仍然是异步的并行并行(除非服务器对此进行限制)。

HTTP Keep Alive仅意味着它们更快,因为两个请求都可以使用相同的连接,尤其是在管道连接时。

但是,如果没有流水线操作,浏览器也可以决定为第二个请求打开第二个连接,而不是等待第一个请求完成并重新使用其连接。有关详细信息,请参阅Under what circumstances will my browser attempt to re-use a TCP connection for multiple requests?

  

我真的不明白这个“最大持久连接”是做什么的。是否意味着当持久连接超过最大数量时,其余连接将变为非持久连接?<​​/ p>

没有。达到限制时,新请求必须等到池中的连接再次可用。