场景:
浏览器如何确定实际处理哪些响应?
我知道会发生什么 - 我想知道为什么。任何解释这一点的参考或网站也将非常感激。
谢谢,
的Vivek。
编辑:询问后看到此similar个问题。如果合适,请合并/删除。
答案 0 :(得分:14)
有关如何完成网络编程的一般性讨论,请参阅this question。
对您的具体问题的简短回答是,接收服务器的响应(在浏览器中)与接收浏览器的请求(在服务器内)不同。当浏览器打开与服务器的新连接时,它正在做的是创建一个套接字,然后在该套接字上调用connect
和send
。当服务器获得此传入连接时,它可能不关心这是否与先前的连接相同。如果关心(例如,它已经登录会话或购物车),它必须使用cookie或诸如此类如果将此连接与先前的连接相关联。 (我忽略了持久连接,这超出了你的问题的范围。)
但是当浏览器收到服务器的响应时,它通过在用于发送请求的同一个套接字上调用recv
来实现,因此它知道在响应开始读取之前响应的请求它。从理论上讲,浏览器维护有关其打开的连接的状态信息。实际上,它有一个列表或插座数组。
浏览器还会跟踪哪些窗口和标签与哪些套接字相关联。这是它如何更新微调器和状态行以反映相应连接的状态。如果用户单击停止按钮,它将知道要关闭的套接字(或套接字)。
因此,在您的方案中,用户单击了与现有套接字关联的窗口或标签中的链接或书签,该套接字表示尚未收到服务器响应的服务器的连接。浏览器可以简单地关闭该套接字,就好像用户单击了停止按钮一样。即使它没有关闭它,浏览器也知道用户不再希望看到响应。同时,它为用户感兴趣的服务器打开一个新套接字。