Chrome处理智能网址并导致并发请求彼此挂起

时间:2013-01-02 09:11:27

标签: google-chrome browser client-server lamp

我在Google-Chrome中遇到一个奇怪的问题,当一个标签打开时,一个长时间运行的脚本,一个不同的标签处于“待定”状态,直到第一个标签完成。我创建了一个小小的小提琴来重现这个问题,我也在这里包括在Safari上运行的结果。当添加这个小提琴时,?q = a和?q = b它解决了这个问题。但是,当我拨打两个不同的智能网址(http://domain.com/a/v1 http://domain.com/a/v2或甚至http://dev.domain.com/a/v6http://dev.domain.com/b/v8时)时,他们也会导致此“未决”行为。

小提琴:

<?php
echo time();
echo '<br>Now:       '. date('h:m:s');

sleep(10);

echo time();
echo '<br>Now:       '. date('h:m:s');

?>

在Google Chrome中打开两个并发标签时,输出: 1:

Now: 11:01:12
1357117332
Now: 11:01:22
1357117342

2:

Now: 11:01:22
1357117342
Now: 11:01:32
1357117352

正如你所看到的,虽然我几乎同时开始了它们,但是第二个在它开始之前等待第一个完成它们。

在Safari上运行时也是如此: 1:

Now: 10:01:36
1357116336
Now: 10:01:46
1357116346

2:

Now: 10:01:37
1357116337
Now: 10:01:47
1357116347

您可以注意到,在Chrome中,第二个脚本仅在第一个脚本完成后启动,而在Safari中,它们一起工作。 是什么导致这种奇怪的行为? 我应该寻找哪些信息来帮助调试原因?

更新:添加?q = a和?q = b的答案可以解决这个问题是正确的。现在我想弄清楚为什么我在这个问题上运行,尽管我打电话给两个不同的网址。我正在使用智能网址,网址domain.com/dir/var1domain.com/dir/var2甚至dev.domain.com/var6都会产生相同的效果。是什么导致这种情况?

1 个答案:

答案 0 :(得分:6)

这是Chrome行为。

如果您对完全相同的网址执行GET请求 - 它会等到第一个结束。只需添加一些不同的参数(例如?q=a)即可更改网址,并看到它们会同时执行。