2011-06-01 53 views
6

方案发送问题:关于浏览器时的行为响应从服务器

  • 浏览器提交一个HTTP请求到服务器。
  • 用户同时点击书签或页面上的另一个链接导致对服务器的新请求。
  • 服务器现在发回两个HTTP响应(或者浏览器从两台服务器获取响应)。

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

我知道会发生什么 - 我试图理解为什么。任何引用或网站解释这一点也将非常感激。

谢谢,

vivek。

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

+4

通常,这两个请求是独立的,最后一个操作是由用户完成的(如果第一个接收到第一个浏览器的响应可能会开始处理它,在收到第二个答复后)。如果使用AJAX,这是完全不同的故事。 – taro 2011-06-05 17:30:53

+0

我认为芋头的答案是正确的。我想大多数浏览器在同一线程(即现代浏览器中的选项卡)上创建另一个请求时会取消当前请求。以前的回答完全被忽略。 – 2011-06-06 17:38:09

回答

13

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

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

但是,当浏览器接收到来自服务器的响应时,它通过在用于发送请求的相同套接字上调用recv ,所以它甚至可以在开始阅读之前知道该响应的具体内容。从理论上讲,浏览器正在维护关于它已经打开的连接的状态信息。实际上,它有一个套接字列表或数组。

浏览器还会跟踪哪些窗口和选项卡与哪些套接字关联。这是它如何更新旋转器和状态行以反映相应连接的状态。如果用户点击停止按钮,它知道要关闭哪个套接字(或多个套接字)。

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

+0

等一下,你是怎么得到25点奖励的? – 2011-06-12 18:19:06

+1

常见问题解答说如果在7天内奖金未被奖励(由谁提供奖金),那么一半金额会自动授予满足特定条件的问题。我想这就是发生了什么事。 – gatkin 2011-06-13 01:36:55

+4

我的歉意。直到今天没有访问该网站。已经添加了另一个赏金,并将在明天将其奖励给这个答案。 – 2011-06-21 17:35:46