有关从服务器发送响应时的浏览器行为的问题

时间:2011-06-01 15:18:52

标签: browser httprequest httpresponse

场景:

  • 浏览器向服务器提交HTTP请求。
  • 用户同时点击书签或页面上的其他链接,从而向服务器发出新请求。
  • 服务器现在发送回两个HTTP响应(或浏览器从两个服务器获取响应)。

浏览器如何确定实际处理哪些响应?

我知道会发生什么 - 我想知道为什么。任何解释这一点的参考或网站也将非常感激。

谢谢,

的Vivek。

编辑:询问后看到此similar个问题。如果合适,请合并/删除。

1 个答案:

答案 0 :(得分:14)

有关如何完成网络编程的一般性讨论,请参阅this question

对您的具体问题的简短回答是,接收服务器的响应(在浏览器中)与接收浏览器的请求(在服务器内)不同。当浏览器打开与服务器的新连接时,它正在做的是创建一个套接字,然后在该套接字上调用connectsend。当服务器获得此传入连接时,它可能不关心这是否与先前的连接相同。如果关心(例如,它已经登录会话或购物车),它必须使用cookie或诸如此类如果将此连接与先前的连接相关联。 (我忽略了持久连接,这超出了你的问题的范围。)

但是当浏览器收到服务器的响应时,它通过在用于发送请求的同一个套接字上调用recv来实现,因此它知道在响应开始读取之前响应的请求它。从理论上讲,浏览器维护有关其打开的连接的状态信息。实际上,它有一个列表或插座数组。

浏览器还会跟踪哪些窗口和标签与哪些套接字相关联。这是它如何更新微调器和状态行以反映相应连接的状态。如果用户单击停止按钮,它将知道要关闭的套接字(或套接字)。

因此,在您的方案中,用户单击了与现有套接字关联的窗口或标签中的链接或书签,该套接字表示尚未收到服务器响应的服务器的连接。浏览器可以简单地关闭该套接字,就好像用户单击了停止按钮一样。即使它没有关闭它,浏览器也知道用户不再希望看到响应。同时,它为用户感兴趣的服务器打开一个新套接字。