1、浏览器和服务器之间是通过HTTP进行通信的,浏览器发送请求给服务器,服务器处理完请求后,发送响应结果给浏览器,浏览器展示给用户。如果服务器处理请求时间比较长,那么浏览器就需要等待服务器的处理结果。

但是,有时候,浏览器不需要等待服务器的处理结果,只要发送的请求已经被服务器接收到。所以,这种情况下,浏览器希望服务器接收到请求立即返回一个响应,比如字符串'success'。这样浏览器可以继续执行后续代码。

解决方法,

使用的服务器是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();//执行耗时代码

2、测试1》test.html
<!DOCTYPE html>
<html>
<head><title>郭颖的测试</title><meta charset="utf8">
</head><body>
</body>
<script src="jquery-3.0.0.js"></script>
<script>
function getCurTime(d) {var time = d.getFullYear() + "-" +(d.getMonth()+1) + "-" + d.getDate() + " " + d.getHours() + ":" + d.getMinutes() + ":" + d.getSeconds();return time;
}function getOther(url) {$.ajax({url: url,success:function(data){console.log(data);console.log(getCurTime(new Date()));}});
}console.log(getCurTime(new Date()));
$.ajax({url: "http://localhost/test.php",success:function(data){console.log(data);console.log(getCurTime(new Date()));getOther("http://localhost/test2.php");}
});</script>
</html>

2> test.php

<?php
echo 'success';
//使用sleep函数模拟耗时任务,耗时5秒
sleep(5);
?>

3>test2.php

<?php
echo 'this is test2.php';
?>

运行localhost/test.html

在控制台输出

由此可以看出

浏览器需要等待test.php文件执行完才能去请求test2.php文件。

接下来修改test.php文件内容,提前输出响应

<?php
if(!function_exists('fastcgi_finish_request')) {ob_end_flush();ob_start();
}
echo 'success';if(!function_exists('fastcgi_finish_request')) {header("Content-Type: text/html;charset=utf-8");header("Connection: close");header('Content-Length: '. ob_get_length());ob_flush();flush();
} else {fastcgi_finish_request();
}sleep(5);
?>

转载于:https://www.cnblogs.com/guoyinglichong/p/7087288.html

php提前输出响应及注意问题相关推荐

  1. matlab离散系统 响应,离散系统的频率响应和输出响应的matlab实现

    离散系统的频率响应和输出响应的matlab实现 上海电力学院 信号与系统实验报告 题目:离散系统的频率响应和输出响应 班级: 2011023 专业:电气工程及其自动化 学号:20111257 2013 ...

  2. Gin 框架学习笔记(03)— 输出响应与渲染

    在 Gin 框架中,对 HTTP 请求可以很方便有多种不同形式的响应.比如响应为 JSON . XML 或者是 HTML 等. ​ Context 的以下方法在 Gin 框架中把内容序列化为不同类型写 ...

  3. 行波iq调制器_行波电光相位调制器输出响应的定量分析

    [1]Becker R A. Travelling-wave electro-optic modulator with maximum bandwidth-length product. Appl. ...

  4. Web安全-HTTP响应拆分(CRLF注入)漏洞

    文章目录 漏洞简介 漏洞利用 会话固定 XSS攻击 实战案例 挖掘技巧 漏洞防御 漏洞简介 CRLF 是 CR 和 LF 两个字符的拼接,它们分别代表 "回车+换行"(\r\n), ...

  5. Servlet基础:接口、类、请求响应、配置、会话追踪、上下文、协作、异常

    10.1 Servlet介绍 ​ Servlet技术是Sun公司提供的一种实现动态网页的解决方案,它是基于Java编程语言的Web服务器端编程技术,主要用于在Web服务器端获得客户端的访问请求信息和动 ...

  6. 服务器无效响应状态码12029,使用wininet发送http请求时出现12029无法与服务器建立连接...

    使用winiet开发http请求的时候出现 12029无法与服务器建立连接  找啦很长时间才找到的错误. 错误描述: 请求如下地址: http://www.xxx.com:8888 返回12029错误 ...

  7. 请概述可视化卷积神经网络的中间输出的基本思想。_卷积神经网络为什么能称霸计算机视觉领域?...

    其它机器学习.深度学习算法的全面系统讲解可以阅读<机器学习-原理.算法与应用>,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造. 书的购买链接 书的勘误,优化,源代码资源 导言 在 ...

  8. 画出该lti系统的幅频特性响应曲线_一文带你通俗理解幅频响应和相频响应

    ​引言 好多人学习数字信号处理学了很久都没有明白这两个概念的真实含义,或者说很多人在设计滤波器的时候,根本就没有考虑什么是幅频响应和相频响应.只是一昧地把滤波器设计出来然后把不要的频率滤除掉,这样是要 ...

  9. php bigpipe实现,如何通过php 实现BigPipe分块输出

    原理:利用 ob_flush() 与 flush()将缓冲区的内容提前输出,浏览器可提早加载这部分的内容,无需等待所有输出完成再加载. 将页面内容划分为一个个小块,输出一个后再输出下一个,使用户可尽早 ...

最新文章

  1. 小程序聊天室开发,发送文字,表情,图片,音频,视频,即时通讯,快速部署,可定制开发
  2. 使用参数化化模型投影点云
  3. 中科院遗传发育所发表“重组菌群体系在根系微生物组研究中应用”的重要综述...
  4. PPT插入文本框但是字体并不是想要的
  5. MIT华人博士研究新冠遭学术霸凌!斯坦福诺奖得主:“你论文少,别说话!”...
  6. C 语言编程 — 高级数据类型 — 数组
  7. python简介怎么写-python爬虫简历怎么写
  8. Windows Live Messenger Beta的邀请
  9. _Linux安装软件方法总结
  10. Java设计模式-观察者模式(订阅发布模式)
  11. 计算机学院在武汉大学,中国最美大学—武汉大学
  12. BDD怎样帮助你解决沟通问题并增进协作
  13. mac Git本地服务器配置
  14. LVS_TUN 实验
  15. mysql 堆表_Mysql聚集索引和非聚集索引(堆组织表和索引组织表)
  16. libSVM + VS2013 + C++使用介绍
  17. Mysql查询汉字语法_Mysql数据库查询语法详解
  18. 别爱太满,别睡太晚:寺庙的流量密码与新媒体生意经
  19. Excel表格常用函数-VLOOKUP|IFERROR|IF
  20. HTML的font标签的使用

热门文章

  1. 实现随着 下拉菜单中 选中值的变化 周边的值也也跟着变化。(使用【 VLOOKUP 】 函数)
  2. 关于结合测试时,数据准备的一些注意点 (之开始篇:如何能更快,更好的准备测试数据)。
  3. mayaa的一些代码
  4. iBaits中,关于insert返回值的问题(注意!!!不必写resultClass= java.lang.Integer,方法的返回值就是int)
  5. 使用spring session+redis技术,解决负载均衡下的session共享问题
  6. dubbo接口统一异常处理的两种方式
  7. C++异常处理:try,catch,throw,finally的用法
  8. 如何在浏览器中增加Jupyter / ipython笔记本的单元格宽度?
  9. 将JS对象转换为JSON字符串
  10. 插入…值(SELECT…FROM…)