PHP(或apache)正在阻止异步请求

PHP(或apache)正在阻止异步请求,apache,concurrency,blocking,Apache,Concurrency,Blocking,似乎有什么东西阻止了两个相同的PHP请求并发执行。我不确定这是我的浏览器、Apache还是PHP。 我已经在Firefox和Chrome(相对较新的版本)中进行了测试。使用Apache/2.2.22(apache2 mpm prefork)和php5.4.9-4ubuntu2(libapache2-mod-php5) 我首先假设这个问题与会话相关,并尝试调用会话\u write\u close(),但没有效果,即使我没有使用会话自动启动。我还使用了Chrome的开发工具并签入了/var/lib/

似乎有什么东西阻止了两个相同的PHP请求并发执行。我不确定这是我的浏览器、Apache还是PHP。 我已经在Firefox和Chrome(相对较新的版本)中进行了测试。使用Apache/2.2.22(apache2 mpm prefork)和php5.4.9-4ubuntu2(libapache2-mod-php5)

我首先假设这个问题与会话相关,并尝试调用
会话\u write\u close()
,但没有效果,即使我没有使用会话自动启动。我还使用了Chrome的开发工具并签入了/var/lib/php5,没有发现任何与正在创建的会话相关的内容

我整个下午都在为这个问题挠头,找不到相关的问题

我已将我的测试用例简化为一个PHP脚本(如下所示),请告诉我您是否可以复制此脚本,和/或解释此脚本:

<?php
if (isset($_GET['frame'])) {
    echo 'Hello world at '. time(). '<br>URI: '. $_SERVER['REQUEST_URI'];
    sleep(2);
    exit;
}
?><!DOCTYPE html>
<html>
<body>
<div style="background-color: #eee;">
    <p>If the two times below are different by around 2 seconds (or more), stuff is broken (or not working as I expected).</p>
    <iframe src="<?=$_SERVER['REQUEST_URI'];?>?frame"></iframe>
    <iframe src="<?=$_SERVER['REQUEST_URI'];?>?frame"></iframe>
</div>
<hr>
<div style="background-color: #eee;">
    <p>The two iframes below are doing the same thing as the two iframes above, except they have an additional query string parameter, this seems to prevent the scripts from blocking.</p>
    <iframe src="<?=$_SERVER['REQUEST_URI'];?>?frame&amp;1"></iframe>
    <iframe src="<?=$_SERVER['REQUEST_URI'];?>?frame&amp;2"></iframe>
</div>
</body>
</html>

如果以下两个时间相差约2秒(或更长),则表示材料已损坏(或未按我预期的方式工作)


我认为您的问题是HTTP和浏览器处理缓存的方式造成的。浏览器发送一个请求,假设它可以将结果用于两个iFrame。但是,PHP默认为发送缓存控制:没有缓存,必须重新验证HTTP头。当浏览器看到此标头时,它会发送另一个请求以获取第二个iframe。这就是为什么第二组iFrame会像您预期的那样工作,因为浏览器会立即发送两个请求,因为URL是不同的