一、问题
浏览器和服务器之间是通过HTTP进行通信的,浏览器发送请求给服务器,服务器处理完请求后,发送响应结果给浏览器,浏览器展示给用户。如果服务器处理请求时间比较长,那么浏览器就需要等待服务器的处理结果。
但是,有时候,浏览器不需要等待服务器的处理结果,只要发送的请求已经被服务器接收到。所以,这种情况下,浏览器希望服务器接收到请求立即返回一个响应,比如字符串'success'。这样浏览器可以继续执行后续代码。
在PHP中,很容易做到。如果服务器使用的是nginx+fpm,可以使用下面的代码:
echo 'success';
fastcgi_finish_request();
// 执行耗时代码.....
如果服务器使用的是apache,可以使用下面的代码:
ob_end_flush();
ob_start();
echo 'success';
header("Content-Type: text/html;charset=utf-8");
header("Connection: close");
header('Content-Length: '. ob_get_length());
ob_flush();
flush();
// 执行耗时代码.....
二、测试
一个静态页面:index.html,代码如下:
<html>
<head><title>测试PHP提前输出响应</title></head>
<body>
<script src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script>