场景:
- 浏览器向服务器提交HTTP请求
- 用户同时点击页面上的书签或另一个链接,从而向服务器发出新的请求
- 服务器现在发回两个HTTP响应(或者浏览器从两个服务器获得响应)
浏览器如何决定实际处理哪些响应?
我知道会发生什么——我正在努力理解为什么。任何解释这一点的参考资料或网站也将不胜感激。
谢谢你,
vivek。
编辑:问了之后看到了这个类似的问题。如果合适,请合并/删除。
您的特定问题的简短答案是,(在浏览器内)接收服务器的响应与(在服务器内)接收浏览器的请求不同。当浏览器打开与服务器的新连接时,它所做的是创建一个套接字,然后在该套接字上调用connect
和send
。当服务器获得这个传入连接时,它可能不在乎这是否与以前的某个连接是同一个客户端。如果真的很在意(例如,它已经登录会话或购物车),它必须使用cookie或类似的东西来将此连接与以前的连接关联起来。(我忽略了持久连接,这超出了你的问题范围。)
但是,当浏览器从服务器接收到响应时,它会在发送请求的同一个套接字上调用recv
,这样它甚至在开始读取响应之前就知道该响应是针对哪个请求的。从理论上讲,浏览器正在维护其打开的连接的状态信息。实际上,它有一个套接字列表或数组。
浏览器还跟踪哪些窗口和选项卡与哪些套接字相关联。这就是它如何更新微调器和状态行以反映相应连接的状态。如果用户单击停止按钮,它就知道要关闭哪个插座。
因此,在您的场景中,用户单击了与现有套接字相关联的窗口或选项卡中的链接或书签,该套接字表示与尚未收到服务器响应的服务器的连接。浏览器可以简单地关闭该套接字,就好像用户单击了停止按钮一样。即使没有关闭,浏览器也知道用户不再想看到响应。同时,它为用户感兴趣的服务器打开一个新的套接字。